【问题标题】:Java: Left-hand side of an argument must be a variable charAt errorJava:参数的左侧必须是变量 charAt 错误
【发布时间】:2016-10-06 22:40:11
【问题描述】:

我正在使用 for 循环将字符串中的所有元音替换为 char。

public String replaceVowel(String text, char letter)
{
    char ch;
    for(int i = 0; i<text.length(); i++)
    {
        ch = text.charAt(i);
        if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'y')
        {
            ch = letter;
        }   
        text.charAt(i) = ch;
    }
    return text;
}

代码在线出错:

text.charAt(i) = ch;

在这一行中,我试图在字符串的循环位置初始化字符。但是该行会产生错误:

赋值的左边必须是变量

感谢任何帮助!

【问题讨论】:

  • 读取错误。左边是受让人,右边是赋值。您不能在逻辑上将 char 值分配给 char 值。您需要将其分配给 char variable
  • Java 中的字符串是不可变的。您可能想要使用字符数组或StringBuilder
  • return text.replaceAll("[aeiouy]", String.valueOf(letter));

标签: java charat


【解决方案1】:

与 C++ 相比,Java 方法调用永远不会返回变量“引用”(如 C++ 引用),因此您永远不能分配方法调用结果。

Java 字符串也是不可变的,这意味着您不能在不创建新字符串的情况下更改字符串中的单个字符。有关此主题,请参阅此帖子 Replace a character at a specific index in a string?

【讨论】:

    【解决方案2】:

    charAt(index) 返回该索引中的字符。不能用于赋值。

    这样的事情会起作用:

    char ch;
            String text = "hailey";
            char letter = 't';
            char[] textAsChar = text.toCharArray();
            for(int i = 0; i<text.length(); i++)
            {
                ch = text.charAt(i);
                if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'y')
                {
                    ch = letter;
                }   
                textAsChar[i] = ch;
            }
            System.out.println(String.valueOf(textAsChar));
    

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多