2010-01-30 2 views
5

Пользователи могут захотеть разграничить номера по своему усмотрению.Наиболее эффективный способ извлечения всех натуральных чисел из строки

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

+0

Обратите внимание, что «натуральные числа» неоднозначно определены (см. Http://en.wikipedia.org/wiki/Natural_number). Кроме того, существует ли максимальный предел размера номеров, который вы хотите разрешить, или они могут быть любого размера? –

ответ

6

Вы можете использовать регулярное выражение. Я изменил этот пример из Sun's regex matcher tutorial:

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+, но вы можете легко изменить это, если хотите.

0

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

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]", " "); и заменить все символы с пробелами и использовать пространство в качестве разделителя.

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

2

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

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"] 

, а затем разобрать строки, как Интс (при необходимости).

Смежные вопросы