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

Java姓名格式化问题:无Split等工具下的姓名提取逻辑修正

问题描述

需要实现两种姓名格式的提取功能:

  • 仅含名和姓时,输出「姓氏,名字首字母」
  • 含名、中间名和姓时,输出「姓氏,名字首字母.中间名首字母」

当前使用的Java代码如下,但处理多空格分隔的仅名姓输入(如Phone Apple)时,原条件判断逻辑失效。且禁止使用Split、数组、StringBuffer/StringBuilder,需修正判断逻辑:

public static void main(String[] args) {
    
    Scanner input = new Scanner(System.in);
    String userInput ="";
System.out.println("Enter firstName middleName lastName separated by at least one blank, It may have more than one blank separating firstName middleName lastName");


    userInput = input.nextLine();
    String firstName ="";
    String middleName ="";
    String lastName ="";

    int firstSpace = userInput.indexOf(' ');
    int secondSpace = userInput.lastIndexOf(' ');
    firstName = userInput.substring(0,firstSpace);
    System.out.println("Value of First:"+ firstName + "     Second:"+secondSpace);
        
    if(secondSpace >= 0)// for if there are only first, last names, which is 2 names
    {
      
      lastName = userInput.substring(secondSpace+1);
      lastName = lastName.trim();
      System.out.println(lastName+ ", " + firstName.charAt(0));
    }
    else// case if input contains 3 names
    {
      middleName = userInput.substring(firstSpace+1, secondSpace);
      middleName = middleName.trim();
      lastName = userInput.substring(secondSpace+1,userInput.length());
      System.out.println(lastName+", " +firstName.charAt(0)+'.'+middleName.charAt(0)+'.');
    }
    
}
修正方案

原逻辑的核心错误是判断条件完全搞反,且未处理名字间的连续空格。正确的判断逻辑应基于「第一个有效空格后,是否还存在第二个有效空格」:

  1. 先提取名字的第一部分(firstName),并跳过第一个空格后的所有连续空格,定位到下一个非空格字符的起始位置
  2. 从该位置开始查找下一个空格:
    • 若找不到空格,说明只有两个名字(名+姓)
    • 若找到空格,说明存在三个名字(名+中间名+姓)

修正后的代码如下:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String userInput = "";
    System.out.println("Enter firstName middleName lastName separated by at least one blank, It may have more than one blank separating firstName middleName lastName");

    userInput = input.nextLine();
    String firstName = "";
    String middleName = "";
    String lastName = "";

    // 找到第一个空格的位置
    int firstSpace = userInput.indexOf(' ');
    firstName = userInput.substring(0, firstSpace).trim();

    // 跳过第一个空格后的所有连续空格,定位到下一个名字的起始位置
    int startPos = firstSpace + 1;
    while (startPos < userInput.length() && userInput.charAt(startPos) == ' ') {
        startPos++;
    }

    // 从startPos开始查找下一个空格,区分是两个名字还是三个名字
    int nextSpace = userInput.indexOf(' ', startPos);

    if (nextSpace == -1) {
        // 仅两个名字:firstName + lastName
        lastName = userInput.substring(startPos).trim();
        System.out.println(lastName + ", " + firstName.charAt(0));
    } else {
        // 三个名字:firstName + middleName + lastName
        middleName = userInput.substring(startPos, nextSpace).trim();
        lastName = userInput.substring(nextSpace + 1).trim();
        System.out.println(lastName + ", " + firstName.charAt(0) + '.' + middleName.charAt(0) + '.');
    }
}

关键逻辑说明

  • 通过while循环跳过连续空格,避免多空格干扰下的位置判断错误
  • 使用indexOf(' ', startPos)从指定位置开始查找空格,准确区分两种输入场景
  • 对提取的各姓名部分调用trim(),避免首尾残留空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:01:04