簡體   English   中英

Java中的字符串相等

[英]String equal in Java

我必須寫一個劊子手的家庭作業。 我們不允許使用任何char數組,只使用String方法來操作字符串本身。 我遇到的一個問題是當我嘗試檢查字符串構建器是否有重復項時。

這是我的劊子手方法

public void playHangMan(Scanner guessWord)
{
    int error = 6;
    String letter;
    boolean vali, dup;

    displayHangman();// call displayHangman method

    // get input, lower case input, and then validate in a loop
    do
    {
        letter = guessWord.nextLine();
        letter = lowerGuess(letter); // call lowerGuess method
        vali = letter.matches("[a-z]");

        dup = checkDup(letter); // call checkDup method

        if(vali == false)
        {
            System.out.print("Please enter only a SINGLE letter: ");
        }
        else if(dup == true)
        {
            System.out.print("Duplicated letter, please enter another: ");
        }

        if(dup == false && vali == true)
        {
            this.guessAns.append(letter);
        }

    }
    while(vali == false && dup == false);


}// end playHangman method

我的重復方法:

private boolean checkDup(String letter)
{
    int i;
    boolean dup = false;

    // check guessAns StringBuilder for duplicate letters
    for(i = 0; i <= this.guessAns.length() - 1 && dup == false; i++)
    {
        if(letter.equals(this.guessAns.charAt(i)))
        {
            dup = true;
        }
    }

    if(dup == true)
    {
        return true;
    }
    else
    {
        return false;
    }   
}// end checkDup method

問題是我的checkDup方法沒有找到任何重復項。 我嘗試將字母a附加到我的字符串構建器中並輸入值a for letter,但仍然沒有運氣。 可以是letter.equals(this.guessAns.charAt(i))將String與Char進行比較,這就是我的checkDup方法無法找到重復項的原因嗎? 有人可以解釋一下我可以解決這個問題嗎? 任何幫助將不勝感激。

有兩種方法可以解決這個問題:

letter.charAt(0) == guessAns.charAt(i);

上面的解決方案假設letter是單個char

另一種方法是在char上調用Character.toString

letter.equals(Character.toString(guessAns.charAt(i)));

調用String.equals(char)將始終返回false,因為字符串從不比較等於字符。 這樣做是為了比較它們作為字符:

if(letter.charAt(0) == this.guessAns.charAt(i)) {

還有另一種檢查重復項的方法:使用正則表達式 正則表達式.*([az])\\1.*將匹配任何在az之間a重復字符的String 為了更通用, .*(.)\\1.*將匹配任何具有任何重復字符的String

dup = letter.matches(".*([a-z])\\1.*");

這是如何工作的: . 匹配任何字符, *表示0次或更多次,所以.*表示任何數量的任何字符(它“消耗”任意數量的字符)。 (開始一 ; )結束一個小組。 [az]匹配az之間a任何字符。 \\1反向引用 因此,正則表達式查找任何字符[az] ,后面緊跟相同的字符。

注意:如果您希望查看String包含相同的字符,即使是分開的,那么這應該有效: .*([az]).*\\1.*

暫無
暫無

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

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