【问题标题】:Java Unexpected type error [duplicate]Java意外类型错误[重复]
【发布时间】:2017-06-14 13:34:34
【问题描述】:

我正在尝试创建一个使用两个字符串的方法。它会将字符串 1 与字符串 2 进行比较,并将所有未找到的字符替换为“_”。例如,如果 String 1 = "Hello"; String 2 = "eo" 然后该方法将返回 String 1 作为 "_e__o" 这是我的代码:

static String getRevealedChars (String s1, String s2)
{
    for (int i = 0; i < s1.length(); i++)
    {
        for (int c = 0; c < s2.length(); c++)
        {
            if (s1.charAt(i) == s2.charAt(c))
            {
                break;
            }
            else 
            {
                // this is where I get my Error
                s1.charAt(i) = '_';
            }
        }
    }
}

但是,当我运行此代码时,我在 s1.charAt(i) = '_'; 处收到“意外类型”错误。我真的是java新手,在此先感谢。

【问题讨论】:

  • s1.charAt(i) = '_'; 无效。
  • 关键点 - String 对象是不可变的。因此,您无法更改您的String 原位 - 您必须创建一个全新的String 才能返回。您可能会发现构建char[] 并在最后将其转换为String 是最简单的方法。
  • 如何将 char 数组转换为 String?
  • new String(yourCharArray);
  • 我尝试创建一个数组,但我不知道如何继续将 char 值添加到数组中

标签: java


【解决方案1】:

s1和s2的数据类型fromString替换为StringBuilder,然后用setCharAt()代替charAt()如下:

StringBuilder s1 = new StringBuilder("hello");
StringBuilder s2 = new StringBuilder("eo");

static String getRevealedChars (StringBuilder s1, StringBuilder s2)
{
    for (int i = 0; i < s1.length(); i++)
    {
        for (int c = 0; c < s2.length(); c++)
        {
            if (s1.charAt(i) == s2.charAt(c))
            {
                break;
            }
            else 
            {
                // this is where I corrected Error
                s1.setCharAt(i, '_');
            }
        }
    }
}

希望这会有所帮助。祝你好运。

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 2016-06-02
    • 2019-04-28
    • 2015-12-11
    • 2014-09-27
    • 2017-12-29
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多