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

如何用Java 8无循环拆分姓名:提取名、中间名与姓氏

问题描述

现有字符串:

String name = "Chris Mike Soloman Miller Cooper";

需求:将该字符串拆分为firstname(第一个单词)、lastname(最后一个单词)、middlename(剩余所有单词),要求不使用for循环,能否通过Java 8特性实现?

预期结果:
firstname = Chris, lastname = Cooper, middlename = Mike Soloman Miller

目前已尝试的代码(希望替换掉其中的for循环):

String name = "Chris Mike Soloman Miller Cooper";
String [] fullName = name.split(" ");
String firstName = fullName[0];
String lastName = fullName[fullName.length-1];
StringBuilder middleName = new StringBuilder();
for(int i=1; i<fullName.length-1; i++) {
    middleName.append(fullName[i]);
    middleName.append(" ");
}
String middleName = String.valueOf(middleName.toString().trim());

解决方案

当然可以用Java 8特性实现,这里提供两种简洁的方案:

方案1:Java 8 Stream API

利用Stream的skip和limit方法筛选中间元素,再通过Collectors.joining完成拼接,完全替代for循环:

import java.util.Arrays;
import java.util.stream.Collectors;

public class NameSplit {
    public static void main(String[] args) {
        String name = "Chris Mike Soloman Miller Cooper";
        String[] fullName = name.split(" ");

        String firstName = fullName[0];
        String lastName = fullName[fullName.length - 1];
        // 跳过第一个元素,取到倒数第二个元素之前的所有内容,用空格拼接
        String middleName = Arrays.stream(fullName)
                                  .skip(1)
                                  .limit(fullName.length - 2)
                                  .collect(Collectors.joining(" "));

        System.out.printf("firstname = %s, lastname = %s, middlename = %s%n", firstName, lastName, middleName);
    }
}

方案2:正则表达式(更简洁,无需拆分数组)

通过正则分组直接提取三个部分,一步到位,甚至不需要拆分字符串数组:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NameSplitRegex {
    public static void main(String[] args) {
        String name = "Chris Mike Soloman Miller Cooper";
        // 正则分组:第一个单词 -> 中间所有内容 -> 最后一个单词
        Pattern pattern = Pattern.compile("^(\\w+)\\s+(.*)\\s+(\\w+)$");
        Matcher matcher = pattern.matcher(name);

        if (matcher.find()) {
            String firstName = matcher.group(1);
            String middleName = matcher.group(2);
            String lastName = matcher.group(3);
            System.out.printf("firstname = %s, lastname = %s, middlename = %s%n", firstName, lastName, middleName);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:00:14