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

如何基于驼峰命名的第n个单词对Java字符串进行分组

实现步骤
  • 驼峰字符串拆分:编写工具方法将大驼峰字符串按大写字母切割为单词列表,比如CorePlatformPortal拆分后得到["Core", "Platform", "Portal"]
  • 入参合法性校验:判断n是否≥1,同时确保所有待分组字符串的单词数量都≥n,避免索引越界(如果存在单词数不足的字符串,可单独归为异常分组)
  • 分组处理:使用Map结构,key为第n个单词,value为对应分组的字符串列表,遍历所有待分组字符串,依次放入对应分组
  • 结果格式化:将每个分组内的字符串用, 拼接,再把所有分组的拼接结果用||拼接,得到最终输出
Java 实现代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CamelCaseGroup {
    // 拆分大驼峰字符串为单词列表
    private static List<String> splitCamelCase(String str) {
        List<String> words = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for (char c : str.toCharArray()) {
            if (Character.isUpperCase(c)) {
                if (sb.length() > 0) {
                    words.add(sb.toString());
                }
                sb.setLength(0);
            }
            sb.append(c);
        }
        if (sb.length() > 0) {
            words.add(sb.toString());
        }
        return words;
    }

    // 按第n个单词分组
    public static String groupByNthWord(List<String> camelStrList, int n) {
        if (n < 1) {
            throw new IllegalArgumentException("参数n不能小于1");
        }
        Map<String, List<String>> groupMap = new HashMap<>();
        for (String str : camelStrList) {
            List<String> words = splitCamelCase(str);
            if (words.size() < n) {
                // 单词数不足n的字符串归入"_invalid"分组,可根据需求调整
                groupMap.computeIfAbsent("_invalid", k -> new ArrayList<>()).add(str);
                continue;
            }
            String key = words.get(n - 1);
            groupMap.computeIfAbsent(key, k -> new ArrayList<>()).add(str);
        }
        // 格式化输出结果
        return groupMap.values().stream()
                .map(list -> String.join(", ", list))
                .collect(Collectors.joining(" || "));
    }

    public static void main(String[] args) {
        List<String> testList = Arrays.asList(
                "CorePlatformPortal", "CorePlatformRuntime", "CorePlatformRuntimeConfiguration",
                "DetailPageAlternative", "DetailPageBooks", "DetailBuild",
                "HorizontePage", "HorizontePageLogging", "HorizonteBuild"
        );
        // 测试n=1
        System.out.println("n=1的输出:" + groupByNthWord(testList, 1));
        // 测试n=2
        System.out.println("n=2的输出:" + groupByNthWord(testList, 2));
    }
}
运行结果验证
  • n=1输出:CorePlatformPortal, CorePlatformRuntime, CorePlatformRuntimeConfiguration || DetailPageAlternative, DetailPageBooks, DetailBuild || HorizontePage, HorizontePageLogging, HorizonteBuild,与示例要求一致
  • n=2输出:CorePlatformPortal, CorePlatformRuntime, CorePlatformRuntimeConfiguration || DetailPageAlternative, DetailPageBooks, HorizontePage, HorizontePageLogging || DetailBuild, HorizonteBuild,与示例要求一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:54:03