Самый эффективный способ извлечь все (натуральные) числа из строки - PullRequest
5 голосов
/ 31 января 2010

Пользователи могут хотеть разделять числа так, как они хотят.

Что является наиболее эффективной (или простой стандартной функцией) для извлечения всех (натуральных) чисел из строки?

Ответы [ 3 ]

6 голосов
/ 31 января 2010

Вы можете использовать регулярное выражение. Я изменил этот пример из учебника по регулярным выражениям Sun :

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test {

    private static final String REGEX = "\\d+";
    private static final String INPUT = "dog dog 1342 dog doggie 2321 dogg";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // get a matcher object
       while(m.find()) {
           System.out.println("start(): "+m.start());
           System.out.println("end(): "+m.end());
       }
    }
}

Находит начальный и конечный индексы каждого числа. Числа, начинающиеся с 0, допускаются с регулярным выражением \d+, но вы можете легко изменить его, если хотите.

2 голосов
/ 31 января 2010

Я не уверен, что точно понимаю ваш вопрос. Но если все, что вам нужно, это вытащить все неотрицательные целые числа, тогда это должно работать довольно хорошо:

String foo = "12,34,56.0567 junk 6745 some - stuff tab tab 789";
String[] nums = foo.split("\\D+");

// nums = ["12", "34", "56", "0567", "6745", "789"]

, а затем анализирует строки как целые (если необходимо).

0 голосов
/ 31 января 2010

Если вы знаете разделитель, то:

String X = "12,34,56";
String[] y = X.split(","); // d=delimiter
int[] z = new int[y.length];
for (int i = 0; i < y.length; i++ )
{
    z[i] = java.lang.Integer.valueOf(y[i]).intValue();
}

Если вы этого не сделаете, вам, вероятно, потребуется предварительная обработка - вы можете сделать x.replace("[A-Za-z]", " "); и заменить все символы пробелами и использовать пробел в качестве разделителя.

Надеюсь, это поможет - я не думаю, что есть встроенная функция.

...