gpt4 book ai didi

java - Java中如果存在多个相同字符,则替换字符串中的字符

转载 作者:行者123 更新时间:2023-12-02 08:56:34 24 4
gpt4 key购买 nike

我已经学习 Java 一个多月了,我正在制作一个绞刑吏游戏,但我在替换字符串中的字符时遇到了麻烦。我写了它,所以你有两个字符串,一个称为“word”,其中包含要猜测的单词,另一个称为“clone”,它是单词的克隆,用下划线替换所有字符。然后,当您猜测一个字母时,它会检查字符串“word”以确保它包含该字母,如果包含,则会用该字母替换“clone”中的下划线。

while (this.guessesLeft >= 0) {
char letter;
int letterIndex;

getGuess();

if(this.word.contains(this.letterGuessed)) {
StringBuilder newString = new StringBuilder(this.clone);

letterIndex = this.word.indexOf(this.letterGuessed);
letter = this.word.charAt(letterIndex);

newString.setCharAt(letterIndex, letter);
this.clone = newString.toString();
} else {
this.guessesLeft--;
}
printGameBoard();

}

我遇到的问题是,如果您猜测一个字母并且字符串包含两个字符,则它只显示一个。例如,如果使用单词“burrito”,这是我的输出。

Guess a letter: r
bur____
You have 5 guess left before you die!

Guess a letter: i
bur_i__
You have 5 guess left before you die!

Guess a letter: r
bur_i__
You have 5 guess left before you die!

我将如何编辑我的游戏逻辑,以便在猜到字母“r”时将两个 R 放入字符串中,而不仅仅是一个?预先感谢您的帮助!

最佳答案

您需要查找信件的所有索引,然后将其全部替换。目前您只寻找第一个。

要查找所有索引,请查找该字母的第一次出现,然后如果找到一个(indexOf 返回正值),请使用 indexOf(int ch, int fromIndex) 从最后一个位置继续查找方法,直到找到全部(indexOf 返回 -1)。

这是一个例子:

if(this.word.contains(this.letterGuessed)) {

// look for an occurrence,
// if you have one, keep looking for others until you have them all (ie: index = -1)
List<Integer> indexes = new ArrayList<>();
int index = this.word.indexOf(this.letterGuessed);
while (index >= 0) { // <- that will loop until the indexOf returns a -1
indexes.add(index);
index = this.word.indexOf(this.letterGuessed, index+1);
}

// replace at all the found indexes
StringBuilder newString = new StringBuilder(this.clone);
for(int letterIndex : indexes) {
char c = this.word.charAt(letterIndex);
newString.setCharAt(letterIndex, c);
}

this.clone = newString.toString();

} else {
this.guessesLeft--;
}

您也可以一次性完成此操作,而无需将索引保存在列表中:

if(this.word.contains(this.letterGuessed)) {
StringBuilder newString = new StringBuilder(this.clone);

int index = this.word.indexOf(this.letterGuessed);
while (index >= 0) {
char c = this.word.charAt(index);
newString.setCharAt(index, c);
index = this.word.indexOf(this.letterGuessed, index+1);
}

this.clone = newString.toString();
System.out.println("clone = " + clone);
} else {
this.guessesLeft--;
}

关于java - Java中如果存在多个相同字符,则替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60452872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com