J'essaie de vérifier si un mot ne contient qu'un ensemble de lettres telles que I, O, S, H et X Supposons que l'utilisateur entre: SSHX, la sortie sera oui, mais si l'utilisateur entre SHEXX, la sortie sera NO
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String Word = sc.next();
Word = Word.toUpperCase();
int length = Word.length();
char letter = 0;
for (int counter = 0; counter < length; counter++) {
letter = Word.charAt(counter);
}
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N') {
System.out.print("NO");
} else {
System.out.print("YES");
}
}
Vous avez un bon moyen de le résoudre. Le problème est que vous ne vérifiez pas réellement chaque lettre, vous devez donc effectuer les vérifications à l'intérieur de la boucle for ou vous ne vérifierez que la dernière lettre. Mais alors vous ne pouvez pas imprimer le "OUI" car vous ne voulez l'imprimer que si TOUTES les lettres sont oui, vous pouvez donc utiliser une valeur booléenne pour vérifier cela aussi:
boolean isMatch = true;
for (int counter = 0; counter < strLength && isMatch; counter++) {
letter = Word.charAt(counter);
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N') {
System.out.print("NO");
isMatch = false;
}
}
if (isMatch) {
System.out.print("YES");
}
Mais, comme d'autres l'ont souligné, l'utilisation d'une expression régulière est plus efficace (et celle-ci a une expression rationnelle fonctionnelle pour ce que vous voulez. L'astérisque signifie zéro ou plus de ce qui est entre crochets.):
if (Word.matches("[HIOSX]*")) {
System.out.print("YES");
} else {
System.out.print("NO");
}
Utilisez une expression régulière .
String regex = "[OSXHI]*";
String string = "SOMETHING";
Matcher matcher = Pattern.compile(regex).matcher(string);
if (matcher.find())
{
String match = matcher.group(1);
System.out.println(match);
}
Quelques ressources supplémentaires:
En plus de la réponse évidente consistant à utiliser une expression régulière, envisagez d'utiliser le code guava API de Google pour simplifier les choses:
if(CharMatcher.anyOf("HIOSX").matchesAllOf(Word)) {
} ...
Utilisez une expression régulière:
if (Word.matches("[HIOSX]+"))
System.out.println("YES");
else
System.out.println("NO");
tout d’abord, vous devriez initialiser une lettre comme ceci: char letter = '0';
au lieu de 0 en second lieu votre boucle for est mal utilisée essayez ce code:
boolean isInSet;
for (int counter = 0; counter < strLength; counter++)
{
letter = Word.charAt(counter);
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N')
{
isInSet=false;
counter=strlength; //end loop
}
else
{
isInSet=true;
}
}
if(isInSet=true)
{
System.out.print("YES");
}
else
{
System.out.print("NO");
}
Maintenant, la boucle boucle sur la chaîne et vérifie si chaque caractère est dans le jeu, si ce n'est pas le cas, la boucle se termine et le booléen est défini sur false, ce qui donne la sortie NO