2010-11-17 2 views
6

Dites que j'ai une chaîne avec des mots de longueur inconnue. Je prévois de séparer la chaîne en utilisant une expression régulière. Quelque chose comme:Regex pour obtenir les deux premiers mots de longueur inconnue à partir d'une chaîne

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

Quelle serait l'expression régulière pour obtenir les deux premiers mots? Je pensais .*//s.*//s, donc tous les caractères, suivi d'un espace, puis tous les caractères, suivis d'un autre espace. Mais utiliser ça me donne exactement la même corde que j'avais auparavant. Est-ce que je vais à ce sujet dans le mauvais sens?

Toute aide serait appréciée!

+0

Vous devez être Prisonnier de Bill, n'est-ce pas? – tchrist

Répondre

12

Si vous n'avez que des espaces entre les mots, divisés par \\s+. Lorsque vous divisez, le tableau serait les mots eux-mêmes. Les deux premiers seraient en arr[0] et arr[1] si vous faites:

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

En supposant que vos « mots » se composent de caractères alphanumériques, l'expression régulière suivante correspondra aux 2 premiers mots:

\w+\s+\w+ 
+0

En fait, cela ne fonctionne pas correctement en Java. – tchrist

+2

"\\ w + \\ s + \\ w +" fonctionnera en Java. Je parlais de la syntaxe générique regex. – buru

4

Si vous voulez diviser exactement le caractère de l'espace:

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

Si vous voulez diviser sur un caractère espace (espace, tabulation, nouvelle ligne, cr):

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

Pour traiter de multiples espaces adjacents comme un séparateur:

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

Même chose pour les espaces:

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

Les deux premiers mots seraient parts[0] et parts[1]

5

Avec des expressions régulières vous pouvez faire quelque chose comme ceci:

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

si vous voulez que les premiers mots de n, ou simplement ceci:

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

si vous voulez que les premier et deuxième mots.

Questions connexes