【问题标题】:Why doesnt it replace the char?为什么它不替换字符?
【发布时间】:2014-12-21 02:08:36
【问题描述】:

字符串“displayed”用*填充,它和字符串“secret”一样长。 secret 是数组中的一个单词。

public void replace(String input)
    {

        for (int j = 0; j < displayed.length(); j++)
        {
           if (input.charAt(0) == secret.charAt(j))  
           {
             displayed1 = displayed.replace(secret.charAt(j), input.charAt(0));

            //System.out.print(input.charAt(0) == secret.charAt(j) ? input.charAt(0) : "*");
           }
        }

        System.out.println(displayed1);

当我运行它时它只给我*,它不会用输入替换*。 但是如果让打印它,它会替换它..

我在编程方面相当新,所以这可能是一个愚蠢的小东西,但我找不到它:(

【问题讨论】:

  • 我认为你误解了String.replace 方法。给定 2 个参数,它找到字符串中第一个字符的所有出现,并将它们替换为第二个字符。但是这个字符串里面只有“*”。它没有来自secret 的任何字符。所以它不会取代任何东西。它只替换存在于其中的字符。
  • 当然..愚蠢的我:(不能这样,我需要重新考虑:)
  • 如果您不想显示值,则将整个文本替换为 *,使用 no of * 来表示字符串,例如如果用户单击按钮或其他内容,用户将是 **** 并显示 thr 字符串

标签: java string input replace chars


【解决方案1】:

secret.charAt(j) 等于input.charAt(0) 时,displayed.replace 的调用不可能有任何效果,因为你正在用相同的字符替换一个字符。说,secret.charAt(j)'x';那么你的调用就相当于

displayed1 = displayed.replace('x', 'x');

相当于displayed1 = displayed,绝对不是你想做的。

此外,displayed 由星号组成,因此来自secret.charAt(j) 的字母甚至都不存在。您可能想要的是逐个字符地组成您的字符串,而不是使用一系列重复替换:

char[] chars = displayed;
for (int j = 0; j < displayed.length(); j++) {
    if (input.charAt(0) == secret.charAt(j)) {
        chars[j] = secret.charAt(j);
    }
}
displayed = new String(chars);
System.out.println(displayed);

上面的代码使用一个字符数组来改变字符串。您也可以使用可变字符串对象StringBuilder 来实现相同的效果。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多