2010-01-30 11 views
5

Gli utenti potrebbero voler delimitare i numeri come vogliono.Il modo più efficiente per estrarre tutti i numeri (naturali) da una stringa

Qual è la più efficiente (o una semplice funzione standard) per estrarre tutti i numeri (naturali) da una stringa?

+0

Si noti che i "numeri naturali" sono definiti ambiguamente (vedere http://en.wikipedia.org/wiki/Natural_number). Inoltre, esiste un limite massimo per le dimensioni dei numeri che si desidera consentire o possono essere di qualsiasi dimensione? –

risposta

6

È possibile utilizzare un'espressione regolare. Ho modificato questo esempio da 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()); 
     } 
    } 
} 

trova l'inizio e fine indici di ciascun numero. I numeri che iniziano con 0 sono consentiti con l'espressione regolare \d+, ma è possibile cambiarli facilmente se lo si desidera.

0

Se si conosce il delimitatore, quindi:

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(); 
} 

Se non lo fai, probabilmente è necessario pre-processo - che si possa fare x.replace("[A-Za-z]", " "); e sostituire tutti i caratteri con spazi e utilizzare lo spazio come delimitatore.

La speranza che aiuta - Non credo che ci sia una funzione integrata.

2

Non sono sicuro di aver capito esattamente la tua domanda. Ma se invece si è di tirare fuori tutti i numeri interi non negativi, allora questo dovrebbe funzionare abbastanza bene:

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

e poi analizzare le stringhe come interi (se necessario).

Problemi correlati