2010-11-17 9 views
6

Dire che ho una stringa con varie parole di lunghezza sconosciuta. Ho intenzione di dividere la stringa usando un'espressione regolare. Qualcosa di simile:Regex per ottenere le prime due parole di lunghezza sconosciuta da una stringa

String resString = origString.split(".*//s.*//s")[0]; 

Quale sarebbe l'espressione regolare per ottenere le prime due parole? Stavo pensando allo .*//s.*//s, quindi a tutti i personaggi, seguito da uno spazio, quindi da tutti i caratteri, seguito da un altro spazio. Ma usando quello mi dà esattamente la stessa corda che avevo prima. Sto andando su questo nel modo sbagliato?

Qualsiasi aiuto sarebbe apprezzato!

+0

Devi essere Prigioniero di Bill, giusto? – tchrist

risposta

12

Se si dispone solo di spazi tra le parole, dividere per \\s+. Quando dividi, la matrice sarebbe le parole stesse. I primi due sarebbero in arr[0] e arr[1] se lo fai:

String[] arr = origString.split("\\s+"); 
2

Assumendo che il "parole" sono costituiti da caratteri alfanumerici, la seguente espressione regolare corrisponderà le prime 2 parole:

\w+\s+\w+ 
+0

In realtà, ciò non funziona correttamente in Java. – tchrist

+2

"\\ w + \\ s + \\ w +" funzionerà in Java. Mi riferivo alla sintassi generica di regex. – buru

4

se si desidera dividerlo esattamente il carattere di spazio:

String[] parts = args[i].split(" "); 

Se si desidera dividere su ogni carattere di spazio (spazio, tabulazione, nuova riga, cr):

String[] parts = args[i].split("\\s"); 

per trattare più spazi adiacenti come un separatore:

String[] parts = args[i].split(" +"); 

Lo stesso vale per gli spazi bianchi:

String[] parts = args[i].split("\\s+"); 

Le prime due parole sarebbero parts[0] e parts[1]

5

con le espressioni regolari puoi fare qualcosa del genere:

public static ArrayList<String> split2(String line, int n){ 
    line+=" "; 
    Pattern pattern = Pattern.compile("\\w*\\s"); 
    Matcher matcher = pattern.matcher(line); 
    ArrayList<String> list = new ArrayList<String>(); 
    int i = 0; 
    while (matcher.find()){ 
     if(i!=n) 
      list.add(matcher.group()); 
     else 
      break; 
     i++; 
    } 
    return list; 
} 

se si desidera che le prime n parole, o semplicemente questo:

public static String split3(String line){ 
    line+=" "; 
    Pattern pattern = Pattern.compile("\\w*\\s\\w*\\s"); 
    Matcher matcher = pattern.matcher(line); 
    matcher.find(); 
    return matcher.group(); 
} 

se si desidera che solo il primo e secondo parole.

Problemi correlati