Java如何按大写字母拆分驼峰字符串并在末尾保留原字符串
问题解决
问题原因
- 你当前使用的正则
([A-Z])(?![A-Z])逻辑错误:仅会匹配后缀不是大写字母的大写字母,并在其前加空格,无法识别连续大写字母的拆分场景,比如原字符串中的BB、TT连续大写段就会拆分失败,出现ByT这类不符合预期的结果。 - 代码中多余的
distinct操作会误删拆分后重复的合法单词,如果你没有去重需求可以直接去掉。 - 如果你当前方法没有读写文件逻辑,不需要声明抛出
FileNotFoundException、IOException异常。
修改后的实现代码
public String breakWord(String fileAsString) { StringBuilder allMethod = new StringBuilder(); // 按空格拆分原输入的多个单词 String[] splitString = fileAsString.split(" "); for (String s : splitString) { // 所有非开头位置的大写字母前加空格,trim去掉开头多余空格 String splitRes = s.replaceAll("(?<=.)(?=[A-Z])", " ").trim(); // 拼接拆分结果 + 原完整单词 String currentRes = splitRes + " " + s; // 追加到总结果,不同单词的处理结果用空格分隔 if (allMethod.length() > 0) { allMethod.append(" "); } allMethod.append(currentRes); } return allMethod.toString(); }
测试验证
输入值为BByTTheWay时,运行后输出结果为:B By T The Way BByTTheWay,和预期完全一致。
内容的提问来源于stack exchange,提问作者Sanzida
相关产品推荐
相关产品推荐

