2010-01-11 5 views
0

J'ai besoin de quelque chose de similaire à "awk {print $ 1}", mais pour java. J'ai une chaîne, semblable à ceci:Java et sous-chaîne

mot1 mot2 mot3 word4 word5 Word6

Comment puis-je substring premier mot, de chaque ligne?

Répondre

9
String example = "word1 word2 word3 word4 word5 word6"; 
String firstWord = example.split(" ", 2)[0]; 
+2

Assurez-vous simplement que la liste n'est pas vide lorsque vous parcourez les données. :) –

+0

Utiliser split ("", 1) serait mieux. Il réduit le nombre de chaînes inutiles créées à une seule chaîne inutile au lieu de lots. –

+0

corrigé, merci –

3
String example = "word1 word2 word3 word4 word5 word6"; 
int indexOf = example.indexOf(" "); 
String firstWord = example.substring(0, indexOf == -1? example.length: indexOf); 
+0

Ceci échoue si la ligne n'a qu'un seul mot. –

+0

Maintenant, il vous donnera une chaîne vide si vous avez seulement un mot. – lins314159

+0

ok, j'ai corrigé que –

4

est ici une solution qui ne manque pas s'il n'y a qu'un seul mot sur la ligne. Je suppose que vous avez déjà supprimé les caractères nouvelle ligne, et cet espace est le seul séparateur autorisé:

for (String line: lines) 
    { 
     int index = line.indexOf(' '); 
     String firstWord; 
     if (index >= 0) 
     { 
      firstWord = line.substring(0, index); 
     } 
     else 
     { 
      firstWord = line; 
     } 
     System.out.println(firstWord); 
    } 
+0

ma solution n'échoue pas s'il n'y a qu'un seul mot ... si split() ne trouve pas le séparateur, il garde juste la chaîne dans le premier élément du tableau. –

+0

Ma solution n'échoue pas non plus. De plus, il utilise beaucoup moins de mémoire et n'analyse pas toute la chaîne. Vous devriez au moins ajouter l'optimisation que j'ai suggérée comme commentaire à votre réponse. –

+0

fait, merci (je répondais juste le "voici une solution qui ne manque pas ...") –