Вопрос-ответ

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

Как извлечь числа из строки и получить массив целых чисел?

У меня есть строковая переменная (в основном английское предложение с неопределенным количеством чисел), и я хотел бы извлечь все числа в массив целых чисел. Мне было интересно, есть ли быстрое решение с регулярными выражениями?


Я использовал решение Шона и немного изменил его:

LinkedList<String> numbers = new LinkedList<String>();

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(line);
while (m.find()) {
numbers.add(m.group());
}
Переведено автоматически
Ответ 1
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());
}

... печатает -2 и 12.


-? соответствует начальному отрицательному знаку - необязательно. \d соответствует цифре, и нам нужно написать \ как \\ в строке Java, хотя. Итак, \d+ соответствует 1 или более цифрам.

Ответ 2

Как насчет использования replaceAll java.lang.Строковый метод:

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

Вывод:

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

Описание

[^-?0-9]+

  • [ и ] определяет набор символов, которые должны совпадать по одному разу, т. Е. Только один раз в любом порядке

  • ^ Специальный идентификатор, используемый в начале набора, используемый для указания соответствия всем символам, не присутствующим в наборе с разделителями, вместо всех символов, присутствующих в наборе.

  • + От одного до неограниченного количества раз, столько раз, сколько возможно, возвращая по мере необходимости

  • -? Один из символов “-" и “"?”

  • 0-9 Символ в диапазоне от “0” до “9”

Ответ 3
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

На самом деле вы можете заменить [0-9] на \d, но это требует экранирования двойной обратной косой черты, что затрудняет чтение.

Ответ 4
  StringBuffer sBuffer = new StringBuffer();
Pattern p = Pattern.compile("[0-9]+.[0-9]*|[0-9]*.[0-9]+|[0-9]+");
Matcher m = p.matcher(str);
while (m.find()) {
sBuffer.append(m.group());
}
return sBuffer.toString();

Это для извлечения чисел с сохранением десятичной дроби

java regex