Java中str.charAt(i)使用赋值运算符报错原因咨询
问题分析与解决
报错原因
Java中的String是不可变对象,调用str.charAt(i)会返回指定位置字符的临时副本,而非原字符串的直接引用。因此你无法通过str.charAt(i) += 32或str.charAt(i) -= 32这种方式修改原字符串的字符——这两行代码本质上是在试图给一个临时变量赋值,不符合Java语法规则。
修正方案
有两种常用的解决思路,都是借助可变的字符容器来处理:
方案1:使用StringBuilder(推荐,适合字符串频繁修改场景)
package com.chapter.BJ.UpperLower; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); StringBuilder sb = new StringBuilder(str); for (int i = 0; i < sb.length(); i++) { char c = sb.charAt(i); if (c >= 65 && c <= 90) { sb.setCharAt(i, (char) (c + 32)); } else if (c >= 97 && c <= 122) { sb.setCharAt(i, (char) (c - 32)); } } System.out.print(sb); } }
方案2:转换为char数组
package com.chapter.BJ.UpperLower; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { if (chars[i] >= 65 && chars[i] <= 90) { chars[i] += 32; } else if (chars[i] >= 97 && chars[i] <= 122) { chars[i] -= 32; } } System.out.print(new String(chars)); } }
优化建议
可以用Java自带的Character工具类方法替代ASCII码加减,代码可读性更强:
// 替换方案1中的判断逻辑 char c = sb.charAt(i); if (Character.isUpperCase(c)) { sb.setCharAt(i, Character.toLowerCase(c)); } else if (Character.isLowerCase(c)) { sb.setCharAt(i, Character.toUpperCase(c)); }
内容的提问来源于stack exchange,提问作者maricenaz
相关产品推荐
相关产品推荐

