泛泛的說,今天的需求就是需要統(tǒng)計特定字符出現(xiàn)的個數(shù),想必各位都會,如果僅僅是實現(xiàn),傳統(tǒng)的實現(xiàn)應該像下面這樣
1 Map<String, Integer> counts = new HashMap<String, Integer>();
2 for (String word : words) {
3 Integer count = counts.get(word);
4 if (count == null) {
5 counts.put(word, 1);
6 } else {
7 counts.put(word, count + 1);
8 }
9 }
這么做沒問題,簡單粗暴快,只不過這次我希望更優(yōu)雅的實現(xiàn)它。今天特地要用一下Google的Guava工程提供的API,Multiset。看上去他是一個集合,他也的確是,我們可以簡單的理解為他是一個元素順序無關,元素可重的集合,這里不細講,以使用為主。后續(xù)有機會展開一下Guava的內(nèi)容。
1 package demo_2015_11_17;
2
3 import java.util.Scanner;
4
5 import com.google.common.collect.HashMultiset;
6 import com.google.common.collect.Multiset;
7
8 public class DEMO
9 {
10 public static void main( String[] args )
11 {
12
13 Scanner s = null;
14 try {
15 //設定數(shù)據(jù)源
16 s = new Scanner(System.in);
17 String srcStr = s.nextLine();
18 String vowels = "aeiou";
19
20 Multiset<String> ms = HashMultiset.create();
21
22 char[] srcChars = srcStr.toCharArray();
23 String curChar = null;
24
25 //遍歷數(shù)據(jù)源
26 for (int i = srcChars.length - 1; i >= 0; i--) {
27 curChar = String.valueOf(srcChars[i]);
28 if(vowels.indexOf(curChar) != -1){
29 ms.add(curChar);
30 }
31 }
32
33 for (String stemp : ms.elementSet()) {
34 System.out.println("元音字母[" + stemp + "]的出現(xiàn)次數(shù)為:" + ms.count(stemp));
35 }
36
37 } finally {
38 s.close();
39 }
40 }
41 }
結(jié)果演示如下:
one twe three four five
元音字母[e]的出現(xiàn)次數(shù)為:5
元音字母[u]的出現(xiàn)次數(shù)為:1
元音字母[i]的出現(xiàn)次數(shù)為:1
元音字母[o]的出現(xiàn)次數(shù)為:2
因為使用了Guava工程,使用maven管理依賴,所以把Guava的版本貼一下
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0-rc2</version>
</dependency>