Java - comment analyser des mots dans une chaîne de caractères pour un mot spécifique
Comment analyser pour le mot "salut" dans la phrase "salut, comment vas-tu?"
ou en analyser pour le mot "comment" au "comment allez-vous?"?
exemple de ce que je veux dans le code:
String word = "hi";
String word2 = "how";
Scanner scan = new Scanner(System.in).useDelimiter("\n");
String s = scan.nextLine();
if(s.equals(word)) {
System.out.println("Hey");
}
if(s.equals(word2)) {
System.out.println("Hey");
}
Quel problème avez-vous remarqué avec votre version actuelle?
Deux problèmes: test d'égalité des chaînes de caractères sans considérer qu'une ligne peut contenir des espaces, des virgules, des points d'exclamation etc. et sans prendre soin de majuscules/minuscules. Voir ma réponse ci-dessous
Deux problèmes: test d'égalité des chaînes de caractères sans considérer qu'une ligne peut contenir des espaces, des virgules, des points d'exclamation etc. et sans prendre soin de majuscules/minuscules. Voir ma réponse ci-dessous
OriginalL'auteur Jackson Curtis | 2010-02-21
Vous devez vous connecter pour publier un commentaire.
À juste trouver la sous-chaîne, vous pouvez utiliser
contains
ouindexOf
ou toute autre variante:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
Si vous vous souciez des limites de mots, puis
StringTokenizer
est probablement une bonne approche.http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html
Vous pouvez ensuite effectuer une casse à cocher (equalsIgnoreCase) sur chaque mot.
OriginalL'auteur Ryan Emerle
Ressemble à un travail de Les Expressions Régulières.
Contains
donnerait un faux positif, disons,"hire-purchase"
.Hey désolé, ne voit pas qu'il y avait d'autres réponses ici :p je l'ai essayé, mais il ne semble pas du tout... quelque chose que j'ai pu faire, éventuellement, de mal? btw: il me donne une erreur lorsque j'utilise le "match" donc j'utilise des "matchs"
+1 Sauf que vous devez d'échappement double
\\b
pour fonctionner correctement. La mise à jour de réponse.OriginalL'auteur Anon.
J'irais pour le
java.util.StringTokenizer
: http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.htmlSinon, vous pouvez prendre un coup d'oeil à
java.util.regex
et utiliser des expressions régulières.StringTokenizer
contient la phrase: "StringTokenizer
est un héritage de la classe qui est retenu pour des raisons de compatibilité, même si son utilisation est déconseillée dans le nouveau code. Il est recommandé à toute personne à la recherche de cette fonctionnalité utiliser la méthode split deString
ou lajava.util.regex
paquet."Simon Nickerson: merci pour cette remarque, je ne savais pas. Dommage qu'ils favorisent
split
depuis qui semble faire tout le travail à l'avantqu'arriverait-il si l'utilisateur a tapé juste dans "salut"? il n'existe pas de " plus après.
avez-vous essayé? Pour moi, la chaîne générateur de jetons correctement passe "hi" sur
nextToken()
Je n'ai pas (désolé), mais je suis intéressé! Avoir mal à demain!
OriginalL'auteur Roland Bouman
J'irais pour un générateur de jetons, à la place.
Définir l'espace et d'autres éléments tels que des virgules, des points, etc. comme délimiteurs. Et rememeber de comparer dans le cas insensibles à la mode.
De cette façon, vous pouvez trouver "salut" "Salut, comment est son test va" sans l'obtention d'un faux positif à "son" et un faux négatif sur "Hi" (qui commence par un " H " majuscule).
OriginalL'auteur p.marino
Vous pouvez passer d'une expression régulière pour le
next()
méthode deScanner
. De sorte que vous pouvez parcourir chaque mot dans l'entrée (Scanner délimite sur les espaces par défaut) et d'effectuer le traitement approprié si vous obtenez un match.OriginalL'auteur Michael Hackner