泛泛的说,今天的需求就是需要统计特定字符出现的个数,想必各位都会,如果仅仅是实现,传统的实现应该像下面这样
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 }
这么做没问题,简单粗暴快,只不过这次我希望更优雅的实现它。今天特地要用一下Google的Guava工程提供的API,Multiset。看上去他是一个集合,他也的确是,我们可以简单的理解为他是一个元素顺序无关,元素可重的集合,这里不细讲,以使用为主。后续有机会展开一下Guava的内容。
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 //设定数据源
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 //遍历数据源
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 + "]的出现次数为:" + ms.count(stemp));
35 }
36
37 } finally {
38 s.close();
39 }
40 }
41 }
结果演示如下:
one twe three four five
元音字母[e]的出现次数为:5
元音字母[u]的出现次数为:1
元音字母[i]的出现次数为:1
元音字母[o]的出现次数为:2
因为使用了Guava工程,使用maven管理依赖,所以把Guava的版本贴一下
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0-rc2</version>
</dependency>