如何在Java中修改字符串中的字符?

时间:2010-06-15 12:39:43

标签: java string

假设我们有字符串t

为什么以下不起作用:

for (int i = 0; i < t.length; t++)
{
    t.charAt(i)+=3;   
}

6 个答案:

答案 0 :(得分:5)

如果您正在谈论Java,那是因为+=运算符是赋值运算符,您将尝试为从方法调用返回的赋值。

而不是试图以这种方式直接操纵String,get a character array并操纵它。然后是create a new String with the resulting array

答案 1 :(得分:1)

因为charAt返回一个值,而不是引用。我知道你可以分配给函数返回值的唯一语言是C ++,只有当函数返回一个引用时,你才能这样做。

你可以char c = t.charAt(3); c += 3;但这只会改变变量c的值,它不会改变t。

为了改变你需要像t.setCharAt(3, t.charAt(3)+3);t[3] += 3;这样的东西,但是因为在大多数现代OO语言(如Java或C#)中,字符串是不可变的方法,如setCharAt don不存在。

答案 2 :(得分:1)

正如Marks所说,你没有提到你的编程语言。对于大多数编程语言,您无法分配函数的返回值(+=是一个赋值)。 C ++是一个例外,但是给定了方法的名称(charAt),看起来你正在使用Java或者C#。要设置角色,如果字符串可以变异,则需要使用某种setChar方法。在Java和C#中,字符串是不可变的,因此一旦创建它们就无法更改。您唯一的选择是创建一个包含转换后的字符的新字符串。

因此,有几个原因,假设Java或C#,为什么代码不起作用:

  • 您无法分配返回值(在C语言中,函数调用不是l值,这意味着它不能出现在赋值的左侧)。
  • 字符串是不可变的(canot一旦创建就改变了它们的字符)。造成这种情况的原因有很多,其中一个原因是,当您的字符串以UTF-8或UTF-16进行Unicode编码时,安全地执行此操作会很昂贵。

答案 3 :(得分:1)

String类是不可变的 - &gt;你无法修改字符串实例。

您将看到字符串方法不会修改当前实例,只会创建一个新字符串。

例如string.toLowerCase()将保持字符串相同并返回一个新的字符串实例...

还有其他原因,它不正确,因为charAt返回一个原始类型 就像写下这样的东西: 3 = 5 + 2 你的意思是3的新值是7吗? 那么当你做3 + 1时它返回8? :d

答案 4 :(得分:0)

你没有提到你的编程语言。

我假设你正在使用C#。在C#中你不能交替一个字符串。您只能创建新的。 因此t.charAt是只读的,不能与你的+ =操作交替。 如果你想做这样的事情,可以使用char数组或StringBuilder类。

编辑: .NET没有方法string.charAt()所以看起来你正在使用另一种编程语言。但我认为它也是同样的问题。

答案 5 :(得分:0)

正如其他人所说的那样,Java字符串是不可改变的,并且是好的reason。由于这些原因,我尝试尽可能多地使我的类不可变。在我看来,其中最引人注目的是它们在没有锁定的情况下是线程安全的。