我试图替换字符串中的字符

im trying to replace a char in a string

我的程序正在猜一个词。我有 2 个字符串 wordToGuess - 用户应该猜测的词和 wordSoFar - 用户看到 _ _ _ 的单词。

当他猜到一个字母时,_ 变为那个字母。 我尝试使用 substring 但它没有用,所以现在我尝试使用 stringBuilder 但它在 运行.

时不起作用
public String showLetter(char letter) {

    StringBuilder sb = new StringBuilder(wordSoFar);

    for (int i = 0; i < wordToGuess.length(); i++) {
        if (wordToGuess.charAt(i) == letter) {
            sb.setCharAt(i, letter); 
        }
     }

    return sb;
}

为此您不需要 StringBuilder:

String wordSoFar = "_ _ _ _ _";
String wordAfterGuess = wordSoFar.substring(0,4)+'x'+wordSoFar.substring(5);

这应该导致“_ _ x _ _”

您的总 class 可能如下所示:

public class test {

private static String wordToGuess = "quorum";
private static String wordSoFar = "______";

public static void main(String[] args) {
    wordSoFar = showLetter('r');
    System.err.println(wordSoFar);
    wordSoFar = showLetter('q');
    System.err.println(wordSoFar);
    wordSoFar = showLetter('m');
    System.err.println(wordSoFar);

}

public static String showLetter(char letter) {
    for (int i = 0; i < wordToGuess.length(); i++) {
       if (wordToGuess.charAt(i) == letter) {
           wordSoFar = wordSoFar.substring(0,i)+letter+wordSoFar.substring(i+1); 
         }
     }
    return wordSoFar;
}

}

给出以下输出:

___r__
q__r__
q__r_m

您似乎正在尝试 return StringBuilder 对象,而不是您的方法指定为 return 类型的 String 对象,并且这两个是完全不同的对象。

您不能将 StringBuilder 转换为 String,但您可以使用 [=16] 将 StringBuilder 的内容输出为 String =] 方法,附加到您的 return 语句的末尾,因此它按照 return sb.toString();

的行读取

你是过于复杂的东西。您需要一个存储 char 值的数据结构;这很容易改变;这可以很容易地变成一个字符串。 String 或 StringBuilder/Buffer 不是满足此要求的良好数据结构(正如您已经想到的那样:因为 String 对象是不可变的)。

因此,我建议一个不同的解决方案:只需 而不是 使用 String 或 Buffer 作为 "data structure" 来猜测字符。

相反,做类似的事情:

char guesseedChars = new char[x];
Arrays.fill(guesseedChars, '_');

最初(其中 x 是要猜测的单词的长度)。

现在,当用户猜对时,你删除 _:

guesseedChars[index] = 'a'

换句话说:您将 "wildcard" _ 替换为正确的字母。

要打印,您可以使用:

String currentContent = new String(guesseedChars)

在每个循环中;并打印该字符串。完成。