美文网首页
工作笔记(七)

工作笔记(七)

作者: overflow_e4e4 | 来源:发表于2019-09-26 11:19 被阅读0次

如何统计一个字符串中每个字符出现的次数?
一个做法是如下:

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语言的时候几乎都是用数组来解决各种问题的,所以就倒着写了。

相关文章

网友评论

      本文标题:工作笔记(七)

      本文链接:https://www.haomeiwen.com/subject/iwilyctx.html