【问题标题】:im trying to replace a char in a string [duplicate]我试图替换字符串中的字符 [重复]
【发布时间】:2017-04-12 07:43:56
【问题描述】:

我的程序在猜一个词。我有 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;
}

【问题讨论】:

标签: java string replace char stringbuilder


【解决方案1】:

你不需要 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

【讨论】:

    【解决方案2】:

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

    您不能将StringBuilder 转换为String,但您可以使用String 方法将StringBuilder 的内容输出为String,附加到@987654328 的末尾@ 声明,所以它的读法是return sb.toString();

    【讨论】:

      【解决方案3】:

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

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

      相反,请执行以下操作:

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

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

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

      guesseedChars[index] = 'a'
      

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

      要打印,您可以使用:

      String currentContent = new String(guesseedChars)
      

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

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 2021-06-17
        • 2012-10-05
        • 1970-01-01
        • 2014-11-05
        • 2022-01-07
        • 2020-12-19
        相关资源
        最近更新 更多