我查看了Stack,但是没有一个例子适用于我的情况(根据我的尝试)。
我想计算一个单词在数组中出现的次数。这是通过拆分输入字符串来完成的,例如"亨利和哈利出去了#34;并计算不同长度的不同字符(在以下示例中为2) 如果我的风格不好,请原谅我,这是我的第一个项目......
他= 1
en = 2
nr = 1
ry = 2
a = 1
an = 1
等....... 这是构造函数的代码:
public NgramAnalyser(int n, String inp)
{
boolean processed = false;
ngram = new HashMap<>(); // used to store the ngram strings and count
alphabetSize = 0;
ngramSize = n;
ArrayList<String> tempList = new ArrayList<String>();
System.out.println("inp length: " + inp.length());
System.out.println();
int finalIndex = 0;
for(int i=0; i<inp.length()-(ngramSize - 1); i++)
{
tempList.add(inp.substring(i,i+ngramSize));
alphabetSize++;
if(i == (inp.length()- ngramSize))
// if i (the index) has reached the boundary limit ( before it gets an error), then...
{
processed = true;
finalIndex = i;
break;
}
}
if(processed == true)
{
for(int i=1; i<(ngramSize); i++)
{
String startString = inp.substring(finalIndex+i,inp.length());
String endString = inp.substring(0, i);
tempList.add(startString + endString);
}
}
for(String item: tempList)
{
System.out.println(item);
}
}
// code for counting the ngrams and sorting them
答案 0 :(得分:2)
一个简单的解决方案应该使用Map<String, Integer> ngram
,并且在对ngram列表进行迭代时,对于输入中找到的每个键(也称为String
)更新计数器(aka Integer
)
答案 1 :(得分:0)
此方法创建一个HashMap,其中键是不同的项和项计数的值。我认为代码很容易理解,但询问是否存在不清楚或可能错误的内容
public Map<String, Integer> ngram(String inp, Integer n)
{
Map<String, Integer> nGram = new HashMap<>();
for(int i = 0; i < inp.length() - n - 1; i++)
{
String item = inp.substring(i, i+n);
int itemCount = nGram.getOrDefault(item, 0);
nGram.put(item, itemCount+1);
}
return nGram;
}
答案 2 :(得分:0)
此代码将字符串转换为相同的字母大小写,删除空格并转向数组。逐个插入每个值,如果它已经存在,则将其计数增加一个,将计数作为一个。祝你好运
//take random string, convert to same case to (Lower or upper) then turn to
character array
char[] charArray = "This is an example text".replaceAll("\\s","").toLowerCase().toCharArray();
System.out.println(Arrays.toString(charArray));
Map<Character, Integer> charCount = new HashMap<>();
for (char c : charArray){
//if key doesnt exist put it and update count value to 1
if(!charCount.containsKey(c)){
charCount.put(c, 1);
}else{
//if key exist increment value by 1
charCount.put(c, charCount.get(c) + 1);
}
}
System.out.println(charCount.toString());
输出:
[t, h, i, s, i, s, a, n, e, x, a, m, p, l, e, t, e, x, t]
{p=1, a=2, s=2, t=3, e=3, h=1, x=2, i=2, l=1, m=1, n=1}