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

Java实现姓名格式化:将输入姓名转为「姓, 名 中间名首字母.」格式

问题根源

你的代码存在两处核心逻辑错误:

  • 你拿到的mn是middleName字符串内部的空格索引,不是原输入字符串input的索引,直接用input.substring(mn+1)截取姓氏会出现错位,这也是你输出ry A Lee的直接原因。
  • 输出语句中错误打印了mn这个整型索引值,而非中间名的首字母,不符合输出格式要求。
修复后可运行代码
import java.util.Scanner;

public class NameFormat {
    public static void main(String[] args) {
        int mn;
        String firstName;
        String lastName;
        String middleName;
        Scanner scnr = new Scanner(System.in);
        String input = scnr.nextLine();
        // 截取名字
        int fn = input.indexOf(" ");
        firstName = input.substring(0, fn);
        // 截取中间名+姓氏的组合字符串
        String midAndLast = input.substring(fn+1);
        // 拿到组合字符串里的空格位置,拆分中间名和姓氏
        mn = midAndLast.indexOf(" ");
        middleName = midAndLast.substring(0, mn);
        lastName = midAndLast.substring(mn + 1);
        // 按要求格式输出
        System.out.println(lastName + ", " + firstName + " " + middleName.charAt(0) + ".");
        scnr.close();
    }
}
测试验证

输入Marry A Lee,输出为Lee, Marry A.;输入John Anthony Brown,输出为Brown, John A.,完全符合规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:06:04