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

编写Java实现句子单词首字母大写程序时replace返回值忽略报错如何解决

错误原因排查

  • Java中String是不可变类,所有修改字符串的方法(比如replace()、substring()等)都不会修改原字符串对象,只会返回修改后的新字符串。你的代码中调用a.replace(a.charAt((i + 1)),d)后没有将返回值赋值给变量,所以修改完全没有生效,这就是IDE提示「result of string.replace(),is ignored」的直接原因。
  • String.replace()方法会替换字符串中所有匹配的字符,不是只替换你指定位置的字符,哪怕你把返回值赋值回去,也会出现把其他位置相同的小写字符也错误大写的问题,逻辑本身就不符合需求。
  • 当前代码没有处理句子第一个单词的首字母大写,只处理了空格后面的字符。
  • 如果输入的字符串末尾有空格,i+1会超出字符串索引范围,抛出IndexOutOfBoundsException异常。

修复方案

推荐用StringBuilder来做可变的字符修改,性能更高且符合按位置修改的需求,修复后代码如下:

package com.company;

import java.util.Scanner;

public class uppercase_1srchar_of_string {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("enter the string :");
        String input = sc.nextLine();
        // 空输入直接返回
        if (input.isEmpty()) {
            System.out.println(input);
            return;
        }
        StringBuilder sb = new StringBuilder(input);
        // 处理第一个字符大写
        sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
        // 遍历处理空格后的字符,限制i最大为length-2避免索引越界
        for (int i = 0; i < sb.length() - 1; i++) {
            if (sb.charAt(i) == ' ') {
                sb.setCharAt(i + 1, Character.toUpperCase(sb.charAt(i + 1)));
            }
        }
        String result = sb.toString();
        System.out.println(result);
    }
}

内容的提问来源于stack exchange,提问作者Vishu's study point

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:36:03