写作背景:闲来无事,忽然想到之前同事问我的一个问题,觉得有点意思记录一下
那么问题呢如题所示
下面我就直接贴出我的代码了:
package com.testcode;
import java.util.HashSet;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CharCount {
public static void main(String[] args) {
String str = "aaaccddtkdffdafdf tghf v";
long startTime = System.currentTimeMillis();
getCharCount(str);
System.out.println("耗时 :" + (System.currentTimeMillis() -startTime));
long startTime1 = System.currentTimeMillis();
getCharCount2(str);
System.out.println("耗时 :" + (System.currentTimeMillis() -startTime1));
}
private static void getCharCount(String str) {
char[] chs = str.toCharArray();
HashSet<String> hashSet = new HashSet<>();
for (int i = 0; i < chs.length; i++) {
hashSet.add(chs[i] + "");
}
Iterator<String> iterator = hashSet.iterator();
for (String s; iterator.hasNext();) {
s = iterator.next();
Pattern compile = Pattern.compile(s);
Matcher matcher = compile.matcher(str);
int a = 0;
while (matcher.find()) {
a++;
}
System.out.println(s + " count : " + a);
}
}
private static void getCharCount2(String str) {
char[] chs = str.toCharArray();
String tmp;
HashSet<String> hashSet = new HashSet<>();
for (int i = 0; i < chs.length; i++) {
hashSet.add(chs[i] + "");
}
Iterator<String> iterator = hashSet.iterator();
for (String s; iterator.hasNext();) {
tmp = iterator.next();
int count = 0;
for (int j = 0; j < chs.length; j++) {
if (chs[j] == tmp.charAt(0)) {
count++;
}
}
System.out.println("char " + tmp + " count :" + count);
}
}
}
f count : 5
v count : 1
g count : 1
count : 2
d count : 5
t count : 2
c count : 2
a count : 4
k count : 1
h count : 1
耗时 :2
char f count :5
char v count :1
char g count :1
char count :2
char d count :5
char t count :2
char c count :2
char a count :4
char k count :1
char h count :1
耗时 :0
方法1是百度来的觉得也是一种思路,方法2是我自己想到的效率高一点。