簡體   English   中英

如何計算字符串數組中的重復項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM