[英]Using Hashsets to Count Amount of Strings in Array without Duplicates
[英]How to count duplicates in an array of strings?
如何對字符串進行分區以提取字符串中出現的所有單詞/術語並計算每個單詞出現的次數? 例如讓:String q = "foo bar foo"
我想要一個DS {<foo,2>, <bar,1>}
。 這是我隨附的最少冗長的代碼*。 缺點還是比較冗長的替代方案?
String[] split = q.toString().split("\\s");
Map<String, Integer> terms = new HashMap<String, Integer>();
for (String term : split) {
if(terms.containsKey(term)){
terms.put(term, terms.get(term)+1);
}
}
(尚未編譯)
修改后的代碼:
String[] split = q.toString().split("\\s");
Map<String, Integer> terms = new HashMap<String, Integer>();
for (String term : split) {
int score = 0;
if(terms.containsKey(term)){
score = terms.get(term);
}
terms.put(term, score +1);
}
PS:未經測試。
我會使用Elite Gentleman建議的代碼,但我只是將其作為討論點:使用StringTokenizer怎么辦? 如果可伸縮性/性能成為問題,令牌生成器的性能會更好嗎? 在這種情況下,您可能只需要在字符串中循環一次,而不是先進行正則表達式拆分,然后再遍歷整個數組。
像這樣:
StringTokenizer st = new StringTokenizer(s);
HashMap<String, Integer> terms = new HashMap<String, Integer>();
while (st.hasMoreElements()) {
String term = st.nextToken();
int score = 0;
if(terms.containsKey(term)){
score = terms.get(term);
}
terms.put(term, score +1);
}
我知道StringTokenizer(據認為不建議棄用)根據Java文檔是Legacy類,不建議使用:
StringTokenizer是一個遺留類,出於兼容性原因而保留,盡管在新代碼中不鼓勵使用它。 建議任何尋求此功能的人改用String的split方法或java.util.regex包。
但是,我想知道在這種情況下,如果使用簡單的令牌,是否可以提供更好的性能結果。
有什么想法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.