Java程序如何识别空格提取姓名并分变量指定格式输出?
问题分析与解决方案
你的代码现在只输出名字的原因主要有两个:
scanner.next()只会读取到第一个空格为止,所以你拿到的fullName其实只有输入的名(比如输入zayaan khan时,fullName就是zayaan),自然无法分割出姓。- 没有处理首字母大写的逻辑,也没有按要求的格式输出。
下面是修正后的完整代码,附详细说明:
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Input forename and surname on one line (space included)"); // 读取整行输入,而非仅读到第一个空格 String fullName = scanner.nextLine(); // 按空白字符分割(支持单个/多个空格、制表符等,更鲁棒) String[] nameParts = fullName.split("\\s+"); // 处理首字母大写:首字符转大写,剩余部分转小写 String forename = capitalize(nameParts[0]); String surname = capitalize(nameParts[1]); // 按指定格式输出 System.out.printf("Forename: %s Surname: %s%n", forename, surname); scanner.close(); } // 封装首字母大写的工具方法,复用性更强 private static String capitalize(String str) { if (str == null || str.isEmpty()) { return str; } return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase(); } }
关键改动说明:
- 替换
scanner.next()为scanner.nextLine():nextLine()会读取用户输入的完整一行(包含空格),确保能获取到名和姓的全部内容。 - 优化字符串分割逻辑:
split("\\s+")可以匹配任意数量的空白字符,避免用户不小心输入多个空格导致的分割错误。 - 首字母大写处理:通过工具方法统一处理格式,不管用户输入的是全小写、全大写还是混合格式,都能转换成规范的首字母大写形式。
- 格式化输出:用
System.out.printf实现指定格式的输出,代码更简洁易读。
测试输入zayaan khan,输出结果如下:
Forename: Zayaan Surname: Khan
完全符合你的需求。
内容的提问来源于stack exchange,提问作者user13473569
相关产品推荐
相关产品推荐

