How to extract numbers from a string and get an array of ints? How to extract numbers from a string and get an array of ints? arrays arrays

How to extract numbers from a string and get an array of ints?


Pattern p = Pattern.compile("-?\\d+");Matcher m = p.matcher("There are more than -2 and less than 12 numbers here");while (m.find()) {  System.out.println(m.group());}

... prints -2 and 12.


-? matches a leading negative sign -- optionally. \d matches a digit, and we need to write \ as \\ in a Java String though. So, \d+ matches 1 or more digits.


What about to use replaceAll java.lang.String method:

    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]+
  • [ and ] delimites a set of characters to be single matched, i.e., only one time in any order
  • ^ Special identifier used in the beginning of the set, used to indicate to match all characters not present in the delimited set, instead of all characters present in the set.
  • + Between one and unlimited times, as many times as possible, giving back as needed
  • -? One of the characters “-” and “?”
  • 0-9 A character in the range between “0” and “9”


Pattern p = Pattern.compile("[0-9]+");Matcher m = p.matcher(myString);while (m.find()) {    int n = Integer.parseInt(m.group());    // append n to list}// convert list to array, etc

You can actually replace [0-9] with \d, but that involves double backslash escaping, which makes it harder to read.