Как разобрать многозначные целые числа из строки - PullRequest
2 голосов
/ 12 декабря 2011

Я работаю над присваиванием, часть которого требует, чтобы я проанализировал целые числа из строки, в которой есть группы цифр, разделенных любым другим символом. Я знаю, что могу использовать метод класса-оболочки Integer.parseInt (string) для разбора целых чисел из строки, содержащей только цифры, но как мне поступить в этом случае? До сих пор я рассмотрел возможность линейного поиска строки и присвоения переменной первому индексу, где появляется цифра и индекс после последней цифры, и созданию временной подстроки на основе этих индексов, из которой можно проанализировать int. Это правильный подход? Возможно, есть более эффективный?

Ответы [ 4 ]

5 голосов
/ 12 декабря 2011

Если это может быть любой символ (один или несколько), то это может быть полезно:

String[] aarray = str.split("[^\\d]+");

Например:

String str = "12fdvvsd34.;h56s67.45c56";
String[] aarray = str.split("[^\\d]+");

for(int i = 0; i < aarray.length; i++)
    System.out.println(Integer.parseInt(aarray[i]));

Вывод:

12
34
56
67
45
56
2 голосов
/ 12 декабря 2011

Пусть API сделает всю работу, приводя к этому простому однострочнику:

int i = Integer.parseInt(input.replaceAll("\\D", ""));

Пояснение:

  • replaceAll("\\D", "") заменяет все нецифровые символы на пустые, что эффективно удаляет все нецифровые символы, оставляя вас только с цифрами
  • Передать результат (только цифры) в Integer.parseInt()
0 голосов
/ 12 декабря 2011

Попробуйте это:

Integer findNumber(String s){
 List<String> num = Arrays.asList(s.split("[^0-9]"));
 for(String n : num) if(!n.isEmpty()) return Integer.parseInt(n);
}

Первая строка разбивает s вокруг частей, которые соответствуют нецифровым символам.

Затем вторая строка находит первую непустую строку цифр в List.

0 голосов
/ 12 декабря 2011

Вы можете использовать метод разделения java.util.String. Если у вас есть строка с подстроками, разделенными токеном:

String data "123.345.55.66";
String [] fields = data.split(".");

Если это не то, что вы хотите, вы можете пролистать детали, циклически перебирая символ String за символом:

for (int i = 0; i < data.size(); ++i) {
    char c = data.charAt(i);
    // manipulate as needed.
}
...