Java告诉我charAt方法是一个变量?

时间:2015-12-16 03:50:41

标签: java for-loop

Java一直给我一个编译器错误,告诉我charAt方法应该是一个变量,我无法弄清楚为什么? 这是我的代码:

    String s = "12345";

    for (int i=0;i<s.length(); i++){
     s.charAt(i)= s.charAt((i+1)%s.length());

       System.out.println(s);
    }
 }

6 个答案:

答案 0 :(得分:2)

s.charAt(i)= s.charAt((i+1)%s.length());

你不能用Java做到这一点。字符串是不可变的,并且s.charAt(i)求值为value,而不是变量。这就是为什么它告诉你它应该是一个变量

答案 1 :(得分:1)

Java String是不可变的,但有StringBuilder一个可变的字符序列)。你可以做点什么,

String str = "12345";
StringBuilder sb = new StringBuilder(str);
for (int i = 0; i < sb.length(); i++) {
    sb.setCharAt(i, str.charAt((i + 1) % sb.length()));
}
System.out.println(sb);

我得到了

23451

答案 2 :(得分:1)

假设您正在使用旋转密码。

String s = "12345";
StringBuilder sb = new StringBuilder();

for (int i = 0; i < s.length(); i++) {
    char ch = s.charAt(i+1);
    ch += 1;
    if (ch > '5')
        ch -= 5;
    sb.append(ch);
}
System.out.println(sb);

String是不可变的,但StringBuilder是可变的,您可以使用它来创建新的String。注意:字符1是该字符的ASCII值或49. https://en.wikipedia.org/wiki/ASCII所以您的数学必须考虑到这一点。

如果您只想旋转字符,可以执行

String s2 = s.substring(1) + s.charAt(0);

答案 3 :(得分:0)

s.charAt(i)= s.charAt((i+1)%s.length());,您charAt()返回特定索引处的字符,您无法分配给它。

答案 4 :(得分:0)

charAt()的结果是无法分配的char。此外,Java中的String immutable ,这意味着在构造字符串之后没有更改字符串的机制。

使用StringBuilder从旧的字符串中逐个创建一个新字符串:

String s = "12345";
StringBuilder res = new StringBuilder("12345");
for (int i=0 ; i<s.length() ; i++) {
     res.setCharAt(i, s.charAt((i+1)%s.length()));
}
System.out.println(res);

答案 5 :(得分:0)

或者你可能使用char数组。

    char[] s = "12345".toCharArray();
    for (int i = 0; i < s.length; i++) {
        s[i] = s[(i + 1) % s.length];
        System.out.println(s);
    }