You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:15:40