2017-03-17 101 views
0

上的ArrayList同樣的道理,我有這樣一個ArrayList:如何計算在Java中

ArrayList<String> hasil = new ArrayList<String>(); 
    hasil.add("saya makan saya"); 
    hasil.add("makan kamu saya"); 
    hasil.add("kamu dimana"); 

,我想指望令牌上的ArrayList。 輸出,我想是這樣的: 薩亞= 3,塔克拉瑪干= 2,卡姆= 2,dimana = 1

我有碼計數這樣的:

for (int i = 0; i < hasil.size(); i++) { 
     arr = hasil.get(i).split(" "); 
     for (int j = 0; j < arr.length; j++) { 
      temp.put(arr[j], 0); 
     } 

    } 

但輸出比我有這樣的: 3,3,2。只是計數令牌不是同一個標記。 我已經將每個單詞的計數存儲在Hashmap中。並且我想檢查hashmap中是否存在單詞,然後計算++; 我試圖讓這樣的代碼,但還是錯

for (int i = 0; i < arr.length; i++) { 
     for(Map.Entry<String,Integer> input : temp.entrySet()){ 
      if(input.getKey().contains(arr[i])){ 
       c++; 
      } 

     } 
     System.out.println("" + c); 
     c=0; 
    } 

誰能幫助我? 謝謝

+1

使用'的HashMap <字符串,整數>'存儲的數每個字。在你的for循環中,你可以檢查'HashMap'中是否已經存在這個單詞,增加了這個單詞的計數。否則將該單詞放在'HashMap'中,計數爲'1' – STaefi

+0

@STaefi我在hashmap中存儲了搜索詞的存儲數量。但我如何檢查這個單詞是否已經存在於散列表中。 –

+0

https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#containsKey(java.lang.Object) –

回答

0
ArrayList<String> hasil = new ArrayList<String>(); 
    hasil.add("saya makan saya"); 
    hasil.add("makan kamu saya"); 
    hasil.add("kamu dimana"); 

    Map<String, Integer> tokenCount = new HashMap<>(); 

    for (String phrase : hasil) { 
     String[] tokens = phrase.split(" "); 
     for (String token : tokens) { 
      Integer count = tokenCount.get(token); 
      if (count == null) 
       count = 0; // first time this token was found 

      tokenCount.put(token, count+1); 
     } 
    } 
+0

謝謝你非常有幫助:) –

0

這可以用Java8實現:

Map<String, Integer> counts = hasil.parallelStream() 
     .flatMap(elm -> Arrays.stream(elm.split(" "))) 
     .collect(Collectors.toConcurrentMap(w -> w, w -> 1, Integer::sum)); 

System.out.println(counts); 

輸出將是:

{saya=3, dimana=1, makan=2, kamu=2} 
+0

謝謝你非常有幫助;) –