You need to enable JavaScript to run this app. Java如何实现字符串按规则拆分拼接:短单词合并、长单词优先两两组合
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

测试验证

使用你给出的三个用例测试可得到完全匹配的输出:

  1. 输入 This is car → 输出 ["this is", "car"]
  2. 输入 a abcd xyz efg → 输出 ["a abcd", "xyz", "efg"]
  3. 输入 a abcd xyz efg ha → 输出 ["a abcd", "xyz", "efg ha"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:36:04