将所有字符(在 StringBuilder 中)从它们出现的索引处替换为另一个字符串
Replacing All Chars (In StringBuilder) at their Index from of their occurrence another string
好吧,我正在给自己做一个刽子手游戏,对 Java 来说不是那么新,但我仍在学习。我有一个问题一直困扰着我。
我需要在其索引处替换字符串构建器(与生成的单词具有相同数量的字符)中的所有字符(如果用户正确猜出了其中一个字母)。我知道有点复杂,但这是一些代码。
StringBuilder wordTemplate = new StringBuilder();
for (int i = 0; i < theWord.length(); i++) {
wordTemplate.append('?');
}
此代码创建了一个字符串,其字符数与生成的单词相同,因此如果单词是 "Hello",它将生成“??????”当你猜到每个字母时,它会替换字母的对应索引(例如,如果我猜到 O,它会打印“????o”等等)
但是,如果一个字母重复出现不止一次,则猜测只会影响 1 个字母,并且只会影响那个字母,这会有效地打破游戏,因为其他出现的次数永远不会改变,从而导致单词永远不会完成。我已经搜索了很长时间,但找不到解决方案来帮助我从单词的多个索引中替换 所有出现的猜测字符。
如果有帮助的话,这是我目前用来替换索引中字母的代码,
if (theWord.contains(guess)) {
wordTemplate.deleteCharAt(theWord.indexOf(guess));
wordTemplate.replace(theWord.indexOf(guess), theWord.indexOf(guess), guess);
System.out.println(wordTemplate);
}
如前所述,这仅适用于每个字符中的 1 个,不适用于多次出现的字符。提前致谢:)
您可以替换以下代码:
wordTemplate.deleteCharAt(theWord.indexOf(guess));
wordTemplate.replace(theWord.indexOf(guess), theWord.indexOf(guess), guess);
到
wordTemplate = new StringBuilder(wordTemplate.toString().replace("?", guess));
试试这个:
String guess = "l";
int start = 0;
do {
int index = theWord.indexOf(guess, start);
if(index >= 0) {
wordTemplate.replace(index, index + 1, guess);
start = index + 1;
} else
break;
} while (true);
System.out.println(wordTemplate);
好吧,我正在给自己做一个刽子手游戏,对 Java 来说不是那么新,但我仍在学习。我有一个问题一直困扰着我。
我需要在其索引处替换字符串构建器(与生成的单词具有相同数量的字符)中的所有字符(如果用户正确猜出了其中一个字母)。我知道有点复杂,但这是一些代码。
StringBuilder wordTemplate = new StringBuilder();
for (int i = 0; i < theWord.length(); i++) {
wordTemplate.append('?');
}
此代码创建了一个字符串,其字符数与生成的单词相同,因此如果单词是 "Hello",它将生成“??????”当你猜到每个字母时,它会替换字母的对应索引(例如,如果我猜到 O,它会打印“????o”等等)
但是,如果一个字母重复出现不止一次,则猜测只会影响 1 个字母,并且只会影响那个字母,这会有效地打破游戏,因为其他出现的次数永远不会改变,从而导致单词永远不会完成。我已经搜索了很长时间,但找不到解决方案来帮助我从单词的多个索引中替换 所有出现的猜测字符。
如果有帮助的话,这是我目前用来替换索引中字母的代码,
if (theWord.contains(guess)) {
wordTemplate.deleteCharAt(theWord.indexOf(guess));
wordTemplate.replace(theWord.indexOf(guess), theWord.indexOf(guess), guess);
System.out.println(wordTemplate);
}
如前所述,这仅适用于每个字符中的 1 个,不适用于多次出现的字符。提前致谢:)
您可以替换以下代码:
wordTemplate.deleteCharAt(theWord.indexOf(guess));
wordTemplate.replace(theWord.indexOf(guess), theWord.indexOf(guess), guess);
到
wordTemplate = new StringBuilder(wordTemplate.toString().replace("?", guess));
试试这个:
String guess = "l";
int start = 0;
do {
int index = theWord.indexOf(guess, start);
if(index >= 0) {
wordTemplate.replace(index, index + 1, guess);
start = index + 1;
} else
break;
} while (true);
System.out.println(wordTemplate);