拆分多个连接的单词而不使用分隔符

时间:2016-10-20 09:31:57

标签: java string replace split

我正在建立一个应该是容忍噪音的单词排名系统,这意味着它应该与 aaaaabbccccc 之类的单词一起使用,其中 aaaaa bb ccccc 是一些随机词。

问题本身需要一个字典,我不允许使用它,但在我的实例中,很有可能在数据集中包含单个单词,所以我想利用这些信息创建一个分裂器,没有明确的字典。

我想做的就是在向结果地图添加单词的同时在单次迭代中使用它。

这是我的意思的快速场景:

输入字

word1
composedword1
1
abiggercomposedword1
bigger
abigger
  • 第1步
    • 阅读 word1
    • 检查结果是否包含包含 word1 的单词或 word1 包含的单词
    • 不,将 word1 添加到结果

结果:

{word1}
  • 第2步
    • 阅读 composedword1
    • 检查结果是否包含包含 composedword1 的单词或 composedword1
    • 包含的单词
    • 是, word1 包含在 composedword1
    • composedword1 word1 之前和之后添加空格
    • 结果
    • 中删除 word1
    • 撰写的word1 添加到结果

结果:

{composed word1} // Note that this is still a single word!
  • 第3步
    • 阅读 1
    • 检查结果是否包含 1 的单词或 1
    • 包含的单词
    • 是, 1 包含在撰写的word1
    • 撰写的word1
    • 1 之前和之后添加空格
    • 结果
    • 中删除撰写的word1
    • 组合词1 添加到结果

结果:

{composed word 1}

直到下一步才能正常工作。

  • 第4步
    • 阅读 abiggercomposedword1
    • 检查结果是否包含 abiggercomposedword1 的单词或 abiggercomposedword1
    • 包含的单词
    • 不,因为结果包含由空格分隔的单个单词。如果该单词以不同的字符串分隔,它会起作用。

现在,考虑到这种情况,这里是我使用的代码(工作到第4步的代码):

// Map between word and score
for (Map.Entry<String, Integer> word : words.entrySet()) {
    boolean hasMergedWords = false;
    // result is the final HashMap, calling new to avoid concurrent modification
    for (Map.Entry<String, Integer> resultWord : new LinkedHashMap<>(result).entrySet()) {
        String wordToCheck = resultWord.getKey().trim();
        String currentWordToCheck = word.getKey().trim();
        if (currentWordToCheck.contains(wordToCheck)) {
            // Merge provided word into topWord
            result.put(currentWordToCheck.replace(wordToCheck, " " + wordToCheck + " ").trim().replaceAll(" +", " "), result.get(wordToCheck) + word.getValue());
            result.remove(wordToCheck);
            hasMergedWords = true;
        } else if (wordToCheck.contains(currentWordToCheck)) {
            result.put(wordToCheck.replace(currentWordToCheck, " " + currentWordToCheck + " ").trim().replaceAll(" +", " "), result.get(wordToCheck) + word.getValue());
            result.remove(wordToCheck);
            hasMergedWords = true;
        }
    }
    if (!hasMergedWords) {
        // Nothing was merged so we add current word
        result.put(word.getKey(), word.getValue());
    }
}

最后,问题是:有人可以帮助我处理第4步中发现的案例吗?我的第一个想法是使用空格作为分隔符来分割 result 中的每个单词,但这会在合并分数时引起问题。

编辑:预期结果为result = {a bigger composed word 1},一个字符串,其中每个单词用空格分隔。

0 个答案:

没有答案