Find all numbers in the String

algorithm, java, string

Solution

Use replaceAll:

String str = "qwerty1qwerty2";      
str = str.replaceAll("[^0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));

Output:

[1, 2]

[EDIT]

If you want to include `-` a.e minus, add `-?`:

String str = "qwerty-1qwerty-2 455 f0gfg 4";      
str = str.replaceAll("[^-?0-9]+", " "); 
System.out.println(Arrays.asList(str.trim().split(" ")));

Output:

[-1, -2, 455, 0, 4]

Description

[^-?0-9]+

- `+` Between one and unlimited times, as many times as possible, giving back as needed

- `-?` One of the characters “-?”

- `0-9` A character in the range between “0” and “9”

Problem

For example, I have input String: "qwerty1qwerty2"; As Output I would like have [1,2]. My current implementation below: ``` import java.util.ArrayList; import java.util.List; public class Test1 { public static void main(String[] args) { String inputString = args[0]; String digitStr = ""; List<Integer> digits = new ArrayList<Integer>(); for (int i = 0; i < inputString.length(); i++) { if (Character.isDigit(inputString.charAt(i))) { digitStr += inputString.charAt(i); } else { if (!digitStr.isEmpty()) { digits.add(Integer.parseInt(digitStr)); digitStr = ""; } } } if (!digitStr.isEmpty()) { digits.add(Integer.parseInt(digitStr)); digitStr = ""; } for (Integer i : digits) { System.out.println(i); } } } ``` But after double check I dislake couple points: Some lines of code repeat twice. I use List. I think it is not very good idea, better using array. So, What do you think? Could you please provide any advice?

Original source

Related problems