如何基于驼峰命名的第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
相关产品推荐
相关产品推荐

