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

时间:2013-03-19 23:58:58

标签: 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();
    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");
    }
}

5 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:5)

使用regular expression

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

一些额外的资源:

答案 2 :(得分:5)

除了使用正则表达式的明显答案之外,请考虑使用Google的Guava API来实现这一点:

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

} ...

答案 3 :(得分:2)

使用正则表达式:

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

答案 4 :(得分: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");
    }

现在循环将循环遍历字符串并检查每个字符是否在集合中,如果循环结束并且布尔值设置为false,则导致NO输出