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

如何将字符串中的第二个单词首字母转为大写?

问题分析与修正

你的代码里存在几个关键基础错误,都是关于String特性和方法调用的问题:

1. String是不可变类型,方法调用后必须重新赋值

String的所有修改类方法(比如trim()、toUpperCase())都不会改变原字符串对象,而是返回一个新的String对象。你现在只是调用方法但没把返回值存回变量,所以name的值从头到尾都是console.next()获取的原始输入值。

2. 方法调用参数错误

  • toUpperCase()方法无需传入参数(除非指定Locale),你传参属于语法错误;
  • substring()需要传入int类型的索引值,但你传的是name.charAt(name.indexOf(" "))(char类型),会导致编译错误。另外如果用户输入的名字没有空格,name.indexOf(" ")会返回-1,这时charAt(-1)会直接抛出StringIndexOutOfBoundsException。

修正后的代码(以“去空格+转大写”需求为例)

如果你的需求是获取用户输入的名字,去除首尾空格后转成全大写,可以用链式调用简化代码:

Scanner console = new Scanner(System.in);
System.out.print("Enter your name: ");

// 链式调用:读取整行输入 -> 去首尾空格 -> 转大写,直接赋值给name
String name = console.nextLine().trim().toUpperCase();

System.out.println("Your name is: " + name);

这里用nextLine()代替next(),因为next()只会读取到第一个空格为止,nextLine()能读取整行输入,更适合处理带空格的全名。

如果需求是处理带空格的全名(比如提取空格后部分转大写)

如果想实现输入"john doe"输出"john DOE"这类效果,可以这么写:

Scanner console = new Scanner(System.in);
System.out.print("Enter your name: ");

String name = console.nextLine().trim();
int spaceIndex = name.indexOf(" ");
if (spaceIndex != -1) {
    // 拆分名字:空格前部分 + 空格后部分转大写
    name = name.substring(0, spaceIndex) + " " + name.substring(spaceIndex + 1).toUpperCase();
} else {
    // 无空格时直接转大写(或保持原样,按需调整)
    name = name.toUpperCase();
}

System.out.println("Your name is: " + name);

链式调用的正确姿势

链式调用的核心是每个方法都返回可继续调用方法的对象,String的修改方法都符合这个要求,比如:

String processed = input.trim().toUpperCase().replace(" ", "_");

一行代码就能完成去空格、转大写、替换空格为下划线的操作,比分步写法更简洁。

内容的提问来源于stack exchange,提问作者Thomas Huppert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:27