我应该如何得到总数。字符串中的子串。 对于字符串中的所有子字符串。
前:
str="This is this my book is This"
O / p应该如下:
This-3
Is=2
my=1
book=1
答案 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);
}
打印地图单位字。