0
votes

Comment vérifier que l'entrée utilisateur correspond à un certain caractère de début

J'écris un programme qui utilise un scanner pour obtenir l'entrée utilisateur et vérifier s'il commence par y ou Y pour effectuer une action. Toute autre entrée sera considérée comme fausse et effectuera une action différente.

if (userInput.equalsIgnoreCase("y") || userInput.equalsIgnoreCase("yup"))

C'est ce que je pense à ce stade, mais ce n'est pas mon code complet. Je comprends que la chaîne et le caractère sont incompatibles, mais je ne sais pas comment cela pourrait être fait. Je ne veux pas non plus simplement mettre plusieurs variantes de l'entrée dans l'instruction if comme ceci

Scanner scnr = new Scanner(System.in);
String userInput;
userInput = scnr.next().charAt(0);
if (userInput.equalsIgnoreCase("y"))

J'espère que cette question est logique. Je suis nouveau dans la programmation et ce site Web, donc je suis désolé si cela est évident!


2 commentaires

Y a-t-il une raison pour laquelle vous ne prenez pas le personnage comme un caractère et ne le comparez pas? myChar == 'y' || myChar == 'Y' fonctionne très bien si tout ce qui vous myChar == 'y' || myChar == 'Y' est que le premier caractère de l'entrée soit 'y' ou 'Y'.


@ChrisGong Merci! Je cherche une réponse à cela depuis si longtemps, mais j'ai complètement manqué ce message pour une raison quelconque. J'ai fini par utiliser .substring (0,1) .equalsIgnoreCase ("Y") et ça marche maintenant!


3 Réponses :


0
votes

essayez-le comme ceci:

userInput = scnr.next();
if (userInput.toLowerCase().startsWith("y")) {
   //if input start with y or yup : do something
}
else{
  //else : do another thing         
}


4 commentaires

Serait-ce également acceptable? (userInput.substring (0,1) .equalsIgnoreCase ("Y"))


@ dlawil2049 cela fonctionne également, car la sous-chaîne ( début , fin ) renvoie la chaîne entre le début et la fin -1


Vous devez vérifier si une chaîne est vide ou non trop. Parce que si c'est le cas, cela vous donnera une erreur


@SwapnilPadaya scnr.next () ne peut pas retourner une chaîne vide, mais s'il utilise scnr.nextLine (), cela provoquera une exception StringIndexOutOfBoundsException



0
votes

Vous pouvez également utiliser regex pour votre entrée comme:

    String str = "Your String";
    Pattern pattern = Pattern.compile("y.*|Y.*");
    Matcher matcher = pattern.matcher(str);
    if (matcher.matches()) {
        System.out.println(str); // Display the string.
    }


0 commentaires

0
votes

Vous pouvez le faire de l'une des manières suivantes:

  1. String userInput = scnr.next().substring(0, 1);if (userInput.equalsIgnoreCase("y")){//...}
  2. char userInput = scnr.next().charAt(0); if (userInput == 'y' || userInput == 'Y'){//...}

0 commentaires