有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的字数。
//举例说明: String content = “中中国55kkfff”;
//统计出:
//中:2
//国:1
//5:2
//k:2
//f:3
@Test
public void test() {
String content = "中中国55kkfff";
System.out.println(content);
StringBuilder hzs = new StringBuilder();
StringBuilder nums = new StringBuilder();
StringBuilder engs = new StringBuilder();
char ch;
for (int i = 0; i < content.length(); i++) {
ch = content.charAt(i);
// 使用Character.getType()的方法来获取字符类型
switch (Character.getType(ch)) {
// Character#UPPERCASE_LETTER UPPERCASE_LETTER
// 大写字母
case 1:
engs.append(ch);
break;
// Character#LOWERCASE_LETTER LOWERCASE_LETTER
// 小写字母
case 2:
engs.append(ch);
break;
// Character#OTHER_LETTER OTHER_LETTER
// 汉字
case 5:
hzs.append(ch);
break;
// Character#DECIMAL_DIGIT_NUMBER DECIMAL_DIGIT_NUMBER
// 数字
case 9:
nums.append(ch);
default:
break;
}
}
// 分类后的字符串
System.out.println(hzs.toString());
System.out.println(nums.toString());
System.out.println(engs.toString());
f(hzs.toString());
f(nums.toString());
f(engs.toString());
}
public void f(String str){
char[] arr = str.toCharArray();
Map<Character, Integer> map = new HashMap<>();
int num = 0;
// 把key 放入map,num全部初始化为0
for (char c : arr) {
map.put(c, num);
}
// 把value 放入map
for (char c : arr) {
if (map.containsKey(c)) {
num = map.get(c);
num++;
map.put(c, num);
}
}
// 遍历
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
System.out.print(entry.getKey().toString() + ":" + entry.getValue() + "\n");
}
}
}
也可以不分割字符串,直接调用f()也可以运行成功
这里调用了Character.getType()的方法是为了熟悉下使用