12

我正在尝试检查一个单词是否仅包含一组字母,例如 I、O、S、H 和 X 假设用户输入:SSHX,输出将为是,但如果用户输入 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");
    }
}
4

5 回答 5

13

你有一个很好的方法来解决它。问题是您实际上并没有检查每个字母,因此您需要在 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");
    }

但是,正如其他人所指出的那样,使用正则表达式更有效(并且这个表达式有一个可以满足您想要的工作的正则表达式。星号表示括号内的零个或多个。):

    if (word.matches("[HIOSX]*")) {
        System.out.print("YES");
    } else {
        System.out.print("NO");
    }
于 2013-03-20T00:10:35.387 回答
5

使用正则表达式

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

一些额外的资源:

于 2013-03-20T00:03:32.540 回答
5

除了使用正则表达式的明显答案之外,考虑使用 Google 的 Guava API来使这变得非常简单:

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

} ...
于 2013-03-20T00:07:01.173 回答
3

使用正则表达式:

if (word.matches("[HIOSX]+"))
    System.out.println("YES");
else
    System.out.println("NO");
于 2013-03-20T00:03:26.847 回答
0

首先,您应该像这样初始化字母: char letter = '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");
    }

Now the loop will loop over the string and check if each character is in the set, if it isnt the loop ends and the boolean is set to false which results in the NO output

于 2013-03-20T00:12:35.700 回答