【问题标题】:changing a character to string in java在java中将字符更改为字符串
【发布时间】:2017-10-24 00:54:28
【问题描述】:

在此方法中,String buildWord 用于if(this.guessedLetters.contains(buildWord)),当我使用主文件运行 testProgram 时,我得到不正确的结果,但当我手动使用 if(this.guessedLetters.contains("" + letter)) 时,它可以工作。我的问题是这里有什么区别??为什么这两个不一样:if(this.guessedLetters.contains(buildWord))if(this.guessedLetters.contains("" + letter))

public String hiddenWord() {
    char letter = ' ';
    String hiddenWord = "";
    String buildWord = "" + letter;
    int i = 0;
    while (i < this.word.length()) {
        letter = this.word.charAt(i);
        if (this.guessedLetters.contains(buildWord))  { // **********
            hiddenWord += letter;
        } else  {
            hiddenWord += '_';
        }
        i++;
    }
    return hiddenWord;
}

【问题讨论】:

  • 值来自main方法,值是“A”“D”“S”“F”“D”,这个词来自教程KISSA

标签: java string char contains


【解决方案1】:

不同之处在于letter 会在循环中更新,但buildWord 不会并且始终等于字符串" "。如果您在重新分配letter 后添加buildWord = "" + letter;,那么它将起作用:

while (i < this.word.length()) {
    letter = this.word.charAt(i);
    buildWord = "" + letter;           // <------------
    if (this.guessedLetters.contains(buildWord))

有关将字符转换为字符串的不同方法的更多信息,请参阅How to convert a char to a String?

【讨论】:

  • 在改变它的工作方式之后,我仍然很困惑,char letter 如何保存更新的值,为什么 String buildWord = " " + letter; 也没有得到更新?例如:如果 char letter = 'K'; 更新了,怎么会,buildWord = " " + letter; 不是 buildWord = " " + 'K'; 等等更新了吗?
  • 没有。当您设置buildWord = "" + letter 时,它会获取letter当前值 并将其与空字符串连接。它不会随着letter 的变化而不断更新buildWord。如果"" + letter 更复杂,比如从数据库中获取一个值:String buildWord = GetDatabaseValue() + letter;,当letter 发生变化时,您是否仍然认为我们应该去更新buildWord?通过获取新的数据库值或使用旧的缓存值,它将如何更新?如果GetDatabaseValue() 发生变化怎么办?它怎么会知道?你需要告诉计算机该做什么。
  • 在您的示例中,您告诉计算机通过使用表达式 "" + letter 调用它来重新计算传递给 contains 的值。
【解决方案2】:

不同之处在于 String.contains(CharSequence s) 方法只会将 CharSequence 作为参数。 CharSequence 是一个接口,所有已知的实现类是:

CharBuffer、Segment、String、StringBuffer、StringBuilder

您可以将上述类中的 任何一个 作为参数传递,但不能直接传递 char 这就是为什么当您尝试将 letter(char) 转换为 buildWord(String) 它接受,因为它是 CharSequence 的实现类。

供进一步参考CharSequence java documentationString java documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多