我想知道,如果我有一个单行字符串,那么如何使用简单的java代码计算该字符串中特定单词的频率?!
提前致谢..
我正在寻找的是java中的示例逻辑代码,用于搜索句子中的特定单词。我正在构建一个垃圾邮件过滤器,需要读取该行然后对其进行分类。
答案 0 :(得分:9)
答案 1 :(得分:4)
您可以使用正则表达式。代码的一个例子是:
public int count(String word, String line){
Pattern pattern = Pattern.compile(word);
Matcher matcher = pattern.matcher(line);
int counter = 0;
while (matcher.find())
counter++;
return counter;
}
答案 2 :(得分:3)
首先按空格分割(参见String#split)
然后使用地图以频率映射单词。
String [] words = line.split(" ");
Map<String,Integer> frequency = new Map <String,Integer>();
for (String word:words){
Integer f = frequency.get(word);
frequency.put(word,f+1);
}
然后你可以找到一个特定的单词:
frequency.get(word)
答案 3 :(得分:2)
使用Guava库:
MultiSet (在需要所有单词的计数时使用)
String line="Hello world bye bye world";
Multiset<String> countStr=HashMultiset.create(Splitter.on(' ').split(line));
System.out.println(countStr.count("Hello")); //gives count of the word 'Hello'
Iterators (在只需要几个字的情况下使用)
String line="Hello world bye bye world";
Iterable<String> splitStr=Splitter.on(' ').split(line);
System.out.println(Iterables.frequency(splitStr, "Hello"));
答案 4 :(得分:1)
经过谷歌搜索和一点点研究后我得到了这些东西__可能会有所帮助
String str="hello new demo hello";
Map<String,Integer> hmap= new HashMap<String,Integer>();
for(String tempStr : str.split(" "))
{
if(hmap.containsKey(tempStr))
{
Integer i=hmap.get(tempStr);
i+=1;
hmap.put(tempStr,i);
}
else
hmap.put(tempStr,1);
}
System.out.println(hmap);
答案 5 :(得分:0)
有几种方法:
选项1&amp; 2有一个开销,试图弄清楚你的单词是否恰好是最后一行(并且需要添加额外的计数)
选项3要求您能够形成正则表达式语法
选项4是陈旧的
答案 6 :(得分:0)
获取字符串数组后,您可以尝试从Java 10开始的以下代码。它使用流来获取频率图。
import java.util.Arrays;
import java.util.stream.Collectors;
public class StringFrequencyMap {
public static void main(String... args) {
String[] wordArray = {"One", "two", "three", "one", "two", "two", "three"};
var freqCaseSensitive = Arrays.stream(wordArray)
.collect(Collectors.groupingBy(x -> x, Collectors.counting()));
//If you want case insensitive then use
var freqCaseInSensitive = Arrays.stream(wordArray)
.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
System.out.println(freqCaseSensitive);
System.out.println(freqCaseInSensitive);
System.out.println("Frequency of \"two\" is: "+freqCaseInSensitive.get("two"));
}
}
输出将是:
{one=1, One=1, three=2, two=3}
{one=2, three=2, two=3}
Frequency of "two" is: 3