如何将字符串中的第二个单词首字母转为大写?
问题分析与修正
你的代码里存在几个关键基础错误,都是关于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
相关产品推荐
相关产品推荐

