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
相关产品推荐
相关产品推荐

