Comment faire des déclarations if/else lire les premiers mots clés correspondants? (Java)


Comment implémentez - vous une condition pour le premier mot clé correspondant dans un programme de ChatBot? Le code ci-dessous est le code actuel que j'utilise:

public static void firstMatchingKeyword1() {
    String sex;
    sex = JOptionPane.showInputDialog(null, "Are you a guy or woman?");
            if (sex.contains("guy")) {
        JOptionPane.showMessageDialog(null, "I am a guy too");  
            } else if (sex.contains("woman")) {
            JOptionPane.showMessageDialog(null, "I am a woman too");
    }
}

Le problème est que si les deux mots clés sont présents, je veux que la sortie soit le premier mot clé tapé. Par exemple : Si l'utilisateur a tapé "je suis une femme, mais aussi un homme". Je veux que la sortie ne soit que le message "Je suis aussi une femme" au lieu de parcourir toutes les déclarations if une par une.

Author: Johnny LD, 2017-08-09

3 answers

indexOf est votre ami ici.

Renvoie l'index dans cette chaîne de la première occurrence de la sous-chaîne spécifiée, à partir de l'index spécifié.

if (sex.indexOf("guy") > 0 && sex.contains("guy") && (sex.indexOf("guy")<sex.indexOf("woman") || 
 sex.indexOf("woman") == -1)) {

{
     JOptionPane.showMessageDialog(null, "I am a guy too");  
} else if (sex.contains("woman")) {
     JOptionPane.showMessageDialog(null, "I am a woman too");
}
 2
Author: ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, 2017-08-09 09:45:18

Je pense que vous avez seulement besoin d'ajouter:

if (sex.contains("guy") && (sex.indexOf("guy")<sex.indexOf("woman") || sex.indexOf("woman") == -1)) {
 1
Author: NikNik, 2017-08-09 09:27:02

Vous pouvez utiliser indexOf(String) pour cela. Cette fonction:

Renvoie l'index dans cette chaîne de la première occurrence sous-chaîne spécifiée.

int posGuy   = sex.indexOf("guy");
int posWoman = sex.indexOf("woman");

if (posGuy >= 0 && posWoman >= 0) {
    if (posGuy < posWoman) {
        //guy before woman
    }
    else {
        //woman before guy
    }
}
else if (posGuy >= 0) {
    // guy
}
else if (posWoman >= 0) {
    // woman
}

Il convient de noter qu'il s'agit d'une recherche sensible à la casse, vous pouvez donc convertir l'entrée en minuscules avant de rechercher afin qu'elle corresponde à "Guy", "GUY", "GuY", etc.

 0
Author: Michael, 2017-08-09 09:36:12