[英]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.*
將匹配任何在a
和z
之間a
重復字符的String
。 為了更通用, .*(.)\\1.*
將匹配任何具有任何重復字符的String
。
dup = letter.matches(".*([a-z])\\1.*");
這是如何工作的: .
匹配任何字符, *
表示0次或更多次,所以.*
表示任何數量的任何字符(它“消耗”任意數量的字符)。 (
開始一組 ; )
結束一個小組。 [az]
匹配a
到z
之間a
任何字符。 \\1
是反向引用 。 因此,正則表達式查找任何字符[az]
,后面緊跟相同的字符。
注意:如果您希望查看String
包含相同的字符,即使是分開的,那么這應該有效: .*([az]).*\\1.*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.