如何显示总数没有。字符串中的子字符串

时间:2016-07-13 18:00:17

标签: java

我应该如何得到总数。字符串中的子串。 对于字符串中的所有子字符串。

前:

str="This is this my book is This"

O / p应该如下:

This-3
Is=2
my=1
book=1

3 个答案:

答案 0 :(得分:0)

如果我是对的,你想要搜索所有单词的出现次数,而不是所有可能的子字符串。一个非常小的,易于理解的代码如下:

// Split at space
String[] words = input.split(" ");
HashMap<String, Integer> countingMap = new HashMap<>();
for (String word : words) {
    Integer counter = countingMap.get(word);
    if (counter == null)) {
        counter = 0;
    }
    countingMap.put(word, counter + 1);
}

然而,这种方法是有限的,因为它假设每个单词都被一个空格包围。

正则表达式是一个功能更强大的工具,它为单词边界提供了一个特殊字符(这也匹配,。!?等)。考虑以下模式:

\b(.+?)\b

您可以在此处查看示例:regex101.com/r/hO8kA0/1

如何在Java中执行此操作?

Pattern pattern = Pattern.compile("\\b(.+?)\\b");
Matcher matcher = pattern.matcher(input);

while(matcher.find()) {
    String word = matcher.group(1);
    // Here is your word, count the occurrences like above
}

答案 1 :(得分:0)

如果我理解正确,这是解决问题的方法:

    String str="This is this my book is This";
    Map<String, Integer> counts = new HashMap<String, Integer>();

    String[] words = str.toLowerCase().split("[\\s\\.,;!\\?]");

    for (String word: words) {
        int count = counts.containsKey(word) ? counts.get(word).intValue() : 0;
        counts.put(word, Integer.valueOf(count + 1));
    }

您只需按要考虑的分隔符拆分字符串,然后在地图中收集事件。

答案 2 :(得分:0)

String str="This is this my book is This";
String[] words = str.split(" ");
Map<String,Integer> unitwords = new HashMap<String,Integer>;
for(String word: words){
  if(unitwords.containsKey(word)){
    unitwords[word]++;
  }else{
    unitwords.add(word,1);
}

打印地图单位字。