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);
}
}
答案 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);
}