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

Java实现句子单词首字母大写程序报错:charAt赋值操作异常求助

Java实现单词首字母大写的错误修复

错误原因分析

你代码中s.charAt(n) = u的写法直接触发了编译错误,核心原因是:

  • Java的String是不可变对象,charAt(int index)方法返回的是指定位置的字符值,并非可修改的变量,因此不能对其进行赋值操作,这就是错误提示unexpected type的由来。

除此之外,你的代码还有其他编译/逻辑问题:

  • substring(0.1)语法错误,字符串截取的参数应该用逗号分隔:substring(0, 1)
  • 变量u未初始化就调用Character.toUpperCase(u),会导致编译报错
  • 循环条件i < s.length错误,获取字符串长度需要调用方法:i < s.length()
  • 方法参数n被内部重新定义int n = i+1;,会覆盖外部参数,造成逻辑混乱
  • 变量s、s1、s2等未在代码中声明,需要确保变量正确定义

修正后的实现方案

方案1:使用StringBuilder(适合原地修改字符)

public String capitalizeWords(String input) {
    if (input == null || input.isEmpty()) {
        return input;
    }
    StringBuilder sb = new StringBuilder(input);
    // 处理第一个单词的首字母
    sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
    
    for (int i = 1; i < sb.length(); i++) {
        // 遇到空格且下一个字符存在时,将下一个字符大写
        if (sb.charAt(i) == ' ' && i + 1 < sb.length()) {
            sb.setCharAt(i + 1, Character.toUpperCase(sb.charAt(i + 1)));
        }
    }
    return sb.toString();
}

方案2:分割单词后逐个处理

public String capitalizeWords(String input) {
    if (input == null || input.isEmpty()) {
        return input;
    }
    // 按任意空白字符分割单词
    String[] words = input.split("\\s+");
    StringBuilder result = new StringBuilder();
    
    for (String word : words) {
        if (!word.isEmpty()) {
            // 首字母大写,其余字符保持原样
            result.append(Character.toUpperCase(word.charAt(0)))
                  .append(word.substring(1))
                  .append(" ");
        }
    }
    // 移除末尾多余的空格
    return result.toString().trim();
}

内容的提问来源于stack exchange,提问作者Ayesha Jamir Jahagirdar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:11:00