将所有字符(在 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);