Java 检查字符串是否仅包含一组字母

Java 检查字符串是否仅包含一组字母,java,string,char,Java,String,Char,我试图检查一个单词是否只包含一组字母,如I、O、S、H和X 假设用户输入:SSHX,输出将是yes,但如果用户输入SHEXX,输出将是NO public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word = sc.next(); word = word.toUpperCase(); int length = word.length();

我试图检查一个单词是否只包含一组字母,如I、O、S、H和X 假设用户输入:SSHX,输出将是yes,但如果用户输入SHEXX,输出将是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");
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
字符串字=sc.next();
word=word.toUpperCase();
int length=word.length();
字符字母=0;
用于(int计数器=0;计数器<长度;计数器++){
字母=word.charAt(计数器);
}
如果(字母!='I'和字母!='O'和字母!='S'和字母!='H'和字母!='Z'和字母!='X'和字母!='N'){
系统输出打印(“否”);
}否则{
系统输出打印(“是”);
}
}

使用正则表达式:

if (word.matches("[HIOSX]+"))
    System.out.println("YES");
else
    System.out.println("NO");
使用一个

一些额外资源:


  • 除了使用正则表达式的明显答案之外,考虑使用谷歌的番石榴使这个非常简单:

    if(CharMatcher.anyOf("HIOSX").matchesAllOf(word)) { 
    
    } ...
    

    你有一个很好的解决方法。问题是,您实际上并没有检查每个字母,所以您需要在for循环中进行检查,否则您将只检查最后一个字母。但是,您不能打印“是”,因为您只想在所有字母都是“是”时打印它,因此您也可以使用布尔值来检查,例如:

        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");
        }
    

    首先,您应该像这样初始化字母:
    char字母='0'而不是0
    其次,for循环使用得很糟糕,请尝试以下代码:

     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");
        }
    
    布尔isInSet;
    用于(int计数器=0;计数器

    现在,循环将在字符串上循环,并检查是否每个字符都在集合中,如果不是,则循环结束,布尔值设置为false,这将导致无输出

    您的正则表达式将只匹配一个字符的字符串(确实应该在列出的字符中)。您需要添加一个
    *
    ,使其与多字符单词匹配。谢谢。实际上,它应该是一个
    +
    ,以防止空字符串匹配。从另一个答案复制粘贴的注释:您的正则表达式将只匹配一个字符的字符串(确实应该在列出的字符中)。你需要添加一个
    *
    来匹配多字符单词。如果你注意到的话,我是第一个回答的。谢谢你的建议。我没有注意到,对不起。。。“复制/粘贴”部分用于另一个答案,然后…:)正则表达式是最简单的解决方案,但是如果你想知道为什么你的正则表达式不起作用,那是因为你没有在
    for
    循环中测试任何东西。您可以在调试器中自己看到这一点。我认为您需要另一种方式:
    CharMatcher.anyOf(“HIOSX”).matchesAllOf(word)
        if (word.matches("[HIOSX]*")) {
            System.out.print("YES");
        } else {
            System.out.print("NO");
        }
    
     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");
        }