如何统计一个字符串中每个字符出现的次数?
一个做法是如下:
String s = "woaini";
int charArr[] = new int[26];
for (int i = 0; i < s.length(); i++) {
charArr[s.charAt(i)-'a']++;
}
这是一个好做法,在字符串只有可能出现小写英文单词的时候,这无疑是最好做法。
当字符串中包含大小写英文字符和各种符号比如>,<,=, ``,+,-那也没关系,这些符号都是[ASCII码]中包含的字符串(https://baike.baidu.com/item/ASCII),把数组大小扩大到128就好了。
当字符串中包含中文
首先要知道java中char和C语言中是不一样的。
C或C++中的char只占一个字节(8位),取值范围为 -128 ~ +127 (-2^7~2^7-1)。JAVA中,char占2字节,16位,可在存放汉字。在java中,中英文字符都是unicode,即如下:
char c = '我';
char c1 = '\u6211'; //\u6211就是汉字 ‘我’的unicode,所以c和c1 两者等价
而且
String s = "我爱你";
s.length();//s的len=3;
这样的话我们可以用HashMap来统计个数了,因为开放一个65536大小的数组不现实,所以就如下:
HashMap<Character,Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
map.putIfAbsent(s.charAt(i),0);
map.put(s.charAt(i),map.get(s.charAt(i))+1);
}
后记:其实我现实想到HashMap来解决上述问题的,但是特定条件下,用数组更省时间和空间,回头一想刚学c语言的时候几乎都是用数组来解决各种问题的,所以就倒着写了。












网友评论