簡體   English   中英

檢查字符串是否只包含一組字母

[英]Check if a string contains only a set of letters

我試圖檢查一個單詞是否只包含一組字母,如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");
    }
}

你有一個很好的解決方法。 問題是你實際上沒有檢查每個字母,所以你需要在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");
    }

使用正則表達式

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

一些額外的資源:

除了使用正則表達式的明顯答案之外,請考慮使用Google的Guava API來實現這一點:

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

} ...

使用正則表達式:

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

首先你應該像這樣初始化字母: 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輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM