Java如何实现字符串按规则拆分拼接:短单词合并、长单词优先两两组合
字符串词组拼接实现方案
需求规则对齐
- 第一步:按空格将输入字符串分割为单个单词
- 第二步:长度<2的短单词必须和紧邻的后一个单词拼接为词组,拼接后的词组作为独立项不参与后续组合
- 第三步:剩余长度≥2的原生单词,总数为奇数时末尾两个组合为词组,其余单独成项;总数为偶数时全部单独成项
原有代码问题
你的代码存在以下核心问题:
- 未实现长单词的组合判断逻辑,所有长度≥2的单词都直接单独加入结果
- 短单词拼接逻辑依赖频繁增删结果列表,容易出现索引异常、拼接顺序错误
- 未处理遍历结束后剩余的待组合缓存单词
修正后代码实现
// 定义短单词长度阈值 private static final int SHORT_WORD_THRESHOLD = 2; private List<String> getFinalSearchList(String[] separated) { List<String> finalResult = new ArrayList<>(); List<String> tempUnits = new ArrayList<>(); int index = 0; // 第一遍遍历:处理短单词拼接 while (index < separated.length) { String currentWord = separated[index]; if (currentWord.length() < SHORT_WORD_THRESHOLD && index + 1 < separated.length) { tempUnits.add(currentWord + " " + separated[index + 1]); index += 2; continue; } tempUnits.add(currentWord); index++; } // 筛选出所有原生长单词(非短单词拼接生成的单元) List<String> longWords = new ArrayList<>(); for (String unit : tempUnits) { if (!unit.contains(" ")) { longWords.add(unit); } } // 第二遍处理:按规则组合长单词 int longWordCount = longWords.size(); int longWordIndex = 0; for (String unit : tempUnits) { if (unit.contains(" ")) { finalResult.add(unit); continue; } // 奇数个长单词时,最后两个组合 if (longWordCount % 2 == 1 && longWordIndex == longWordCount - 2) { finalResult.add(longWords.get(longWordIndex) + " " + longWords.get(longWordIndex + 1)); longWordIndex += 2; continue; } if (longWordIndex < longWordCount) { finalResult.add(unit); longWordIndex++; } } return finalResult; }
测试验证
使用你给出的三个用例测试可得到完全匹配的输出:
- 输入
This is car→ 输出["this is", "car"] - 输入
a abcd xyz efg→ 输出["a abcd", "xyz", "efg"] - 输入
a abcd xyz efg ha→ 输出["a abcd", "xyz", "efg ha"]
内容的提问来源于stack exchange,提问作者Bhavin Solanki
相关产品推荐
相关产品推荐

