Essayer d'écrire une méthode courte pour pouvoir analyser une chaîne et extraire le premier mot. Je cherchais le meilleur moyen de le faire.
J'imagine que j'utiliserais str.split(",")
, mais j'aimerais toutefois ne saisir que le premier mot d'une chaîne et le sauvegarder dans une variable, puis placer le reste des jetons dans une autre.
Y a-t-il un moyen concis de faire cela?
Le deuxième paramètre de la méthode split
est facultatif. S'il est spécifié, la chaîne cible ne sera divisée que N
fois.
Par exemple:
String mystring = "the quick brown fox";
String arr[] = mystring.split(" ", 2);
String firstWord = arr[0]; //the
String theRest = arr[1]; //quick brown fox
Vous pouvez également utiliser la méthode substring
de String .
Tu devrais faire ça
String input = "hello world, this is a line of text";
int i = input.indexOf(' ');
String Word = input.substring(0, i);
String rest = input.substring(i);
Ce qui précède est le moyen le plus rapide de faire cette tâche.
Pour simplifier ce qui précède:
text.substring(0, text.indexOf(' '));
Voici une fonction prête à l'emploi:
private String getFirstWord(String text) {
int index = text.indexOf(' ');
if (index > -1) { // Check if there is more than one Word.
return text.substring(0, index); // Extract first Word.
} else {
return text; // Text is the first Word itself.
}
}
Le simple que je faisais est
str.contains(" ") ? str.split(" ")[0] : str
Où str
est votre chaîne ou votre texte bla bla :). Donc, si
str
a une valeur vide et retourne tel quel.str
c'est avoir un mot, il retourne tel quel.str
est plusieurs mots, il extrait le premier mot et retourne.J'espère que c'est utile.
Vous pouvez utiliser String.split
avec une limite de 2.
String s = "Hello World, I'm the rest.";
String[] result = s.split(" ", 2);
String first = result[0];
String rest = result[1];
System.out.println("First: " + first);
System.out.println("Rest: " + rest);
// prints =>
// First: Hello
// Rest: World, I'm the rest.
split
Vous pouvez utiliser un scanner
http://download.Oracle.com/javase/1.5.0/docs/api/Java/util/Scanner.html
Le scanner peut également utiliser des délimiteurs autre que les espaces. Cet exemple lit plusieurs éléments d'une chaîne:
String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close();
affiche le résultat suivant:
1 2 red blue
Vous pouvez également utiliser http://download.Oracle.com/javase/6/docs/api/Java/util/StringTokenizer.html
import org.Apache.commons.lang3.StringUtils;
...
StringUtils.substringBefore("Grigory Kislin", " ")
Je sais que cette question a déjà reçu une réponse, mais j’ai une autre solution (pour ceux qui recherchent encore des réponses) qui peut tenir sur une seule ligne:.
String test = "123_456";
String value = test.split("_")[0];
System.out.println(value);
La sortie montrera:
123
comme ça:
final String str = "This is a long sentence";
final String[] arr = str.split(" ", 2);
System.out.println(Arrays.toString(arr));
arr[0]
est le premier mot, arr[1]
est le reste
Aucune de ces réponses ne semble définir ce que le PO pourrait vouloir dire par un "mot". Comme d'autres l'ont déjà dit, une "limite de mot" peut être une virgule et ne peut certainement pas être considérée comme un espace, ni même comme un "espace blanc" (c'est-à-dire également des tabulations, des nouvelles lignes, etc.)
Au plus simple, je dirais que le mot doit être composé de lettres Unicode et de chiffres. Même cela peut ne pas être juste: une String
peut ne pas être considérée comme un mot si elle contient des nombres ou si elle commence par un nombre. De plus, qu'en est-il des traits d'union, ou des apostrophes, dont il existe probablement plusieurs variantes dans l'ensemble d'Unicode? Toutes sortes de discussions de ce type et de nombreuses autres s’appliqueront non seulement à l’anglais, mais également à toutes les autres langues, y compris la langue non humaine, la notation scientifique, etc. C’est un sujet important.
Mais un début pourrait être ceci (NB écrit en Groovy):
String givenString = "one two9 thr0ee four"
// String givenString = "oňňÜÐæne;:tŵo9===tĥr0eè? four!"
// String givenString = "mouse"
// String givenString = "&&^^^%"
String[] substrings = givenString.split( '[^\\p{L}^\\d]+' )
println "substrings |$substrings|"
println "first Word |${substrings[0]}|"
Cela fonctionne correctement pour les première, deuxième et troisième givenString
s. Pour "&& ^^^%", il est indiqué que le premier "mot" est une chaîne de longueur nulle et le second est "^^^". En fait, un jeton de longueur zéro est la manière dont String.split
dit: "votre chaîne donnée ne commence pas par un jeton mais par un délimiteur".
NB dans regex \p{L}
signifie "toute lettre Unicode". Le paramètre String.split
est bien sûr ce qui définit le "motif de délimitation" ... c’est-à-dire un groupe de caractères qui sépare les jetons.
NB2 Les problèmes de performance ne sont pas pertinents pour une discussion de ce type, et presque certainement pour tous les contextes.
NB3 Mon premier point de contact était le package StringUtils
d'Apache Commons. Ils disposeront probablement des solutions les plus efficaces et les mieux conçues pour ce genre de choses. Mais rien n’a surgi ... https://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/StringUtils.html ... bien que quelque chose d’utile puisse se cacher Là.