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

时间:2017-04-12 07:43:57

标签: java string replace char stringbuilder

我的节目正在猜一个字。我有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;
}

3 个答案:

答案 0 :(得分:0)

您不需要StringBuilder:

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

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

你的总课程可能如下所示:

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

答案 1 :(得分:0)

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

您无法将StringBuilder投射到String,但您可以使用{{1}将StringBuilder的内容输出为String } {}方法,附加到.toString()语句的末尾,因此它沿着return

的行开头

答案 2 :(得分:0)

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

因此,我建议采用不同的解决方案:只需将使用字符串或缓冲区作为猜测字符的“数据结构”。

相反,做一些事情:

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

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

现在,当用户做出正确的猜测时,请删除_:

guesseedChars[index] = 'a'

换句话说:用正确的字母替换“通配符”_。

要打印,您可以使用:

String currentContent = new String(guesseedChars)

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