从Java中的大字符串中查找单词列表及其计数的最佳方法?

时间:2016-12-05 23:05:48

标签: java guava

我有一个单词列表,让我们说

  • Spring Data
  • 爪哇
  • C ++
  • 的Junit

我在文件或字符串中有一个非常大的文本

我需要查找列表中的每个单词,在该大字符串中找到该单词的出现次数?

我有点期待结果

  • Spring Data(10)
  • Java(3)
  • C ++(6)
  • Junit(0)

以上只是4个元素,但是在我的情况下它可能会达到几千个,我可以遍历每个元素并找到针对该字符串的no.of计数,但不确定这是考虑性能的最佳解决方案吗?你们能否为我找到最好的解决方法?

3 个答案:

答案 0 :(得分:1)

鉴于需要匹配包含空格的字符串,我倾向于循环遍历目标字符串列表,在该字符串的文本中执行适当的转义正则表达式搜索,并记录正则表达式匹配的数量。

答案 1 :(得分:0)

您可以通过用空格分隔主strings并使用Java 8的Stream API来计算string的数量,例如:

public static void main(String[] args) throws FileNotFoundException {

    String s = "a b c d e f d g e a c v d a w s";
    Map<String, Long> wordCount = Arrays.stream(s.split("\\s"))
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    System.out.println(wordCount);
}

答案 2 :(得分:0)

如果您不想使用Streams,可以这样做:

    String s = "a b c d e f d g e a c v d a w s";
    Map<String, Long> wordCount = new HashMap<>();
    String[] words = s.split("\\s");
    for (String word : words) {
        Long count = wordCount.get(word);
        if (count == null) {
            count = 0L;
        }
        count = count + 1L;
        wordCount.put(word, count);
    }
    System.out.println(wordCount);