- 数组的索引法
- 使用流(使用TreeMap)
- 巧用split
- 巧用Pattern
一、实现代码
importjava.util.*;
importjava.util.function.Function;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
importjava.util.stream.Collectors;
/**
*@author米兜
*@description
*@date2020/6/2622:23
*@modifiedby
*/
publicclassSum{
publicstaticvoidmain(String[]args){
Stringstr=“guanzhuchengxuyuanmidou”;
System.out.println(“———–1.数组的索引法【start】———–“);
count1(str);
System.out.println(“———–1.数组的索引法【end】———–“);
System.out.println(“———————————————“);
System.out.println(“———–2.使用流(使用TreeMap)【start】———–“);
count2(str);
System.out.println(“———–2.使用流(使用TreeMap)【end】———–“);
System.out.println(“———————————————“);
System.out.println(“———–3.巧用split【start】———–“);
count3(str);
System.out.println(“———–3.巧用split【end】———–“);
System.out.println(“———————————————“);
System.out.println(“———–4.巧用Pattern【start】———–“);
count4(str);
System.out.println(“———–4.巧用Pattern【end】———–“);
}
/**
*@author米兜
*@param
*@description1.数组的索引法
*@date2020/6/2622:51
*/
publicstaticvoidcount1(Stringstr){
//创建26个空间大小的数组,存放26个字母
int[]nums=newint[26];
for(chari:str.toCharArray()){
//自动将chari转化成ascall码
if(i>=97&&i<=122){
//利用数组的索引进行存储
nums[i-97]++;
}
}
for(inti=0;i<nums.length;i++){
if(nums[i]!=0){
//i加上97并且再转化为char类型就可以显示相应的字符
charj=(char)(i+97);
System.out.println(“字符:”+j+“====”+“个数”+nums[i]);
}
}
}
/**
*@author米兜
*@param
*@description2.使用流(使用TreeMap/这里也是用map)
*@date2020/6/2622:51
*/
publicstaticvoidcount2(Stringstr){
TreeMap<String,Long>result=Arrays.stream(str.split(“”))
.sorted()
//.collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
.collect(Collectors.groupingBy(Function.identity(),TreeMap::new,Collectors.counting()));
Iteratoriter=result.entrySet().iterator();
while(iter.hasNext()){
Map.Entryentry=(Map.Entry)iter.next();
System.out.println(“字符:”+(String)entry.getKey()+“====”+“个数”+(Long)entry.getValue());
}
}
/**
*@author米兜
*@param
*@description3.巧用split
*@date2020/6/2622:51
*/
publicstaticvoidcount3(Stringstr){
ArrayList<String>arrayList=newArrayList<>();
for(charc:str.toCharArray()){
intcount=str.split(String.valueOf(c)).length-1;
//最后一个字符串split要+1
if(str.substring(str.length()-1,str.length()).equals(String.valueOf(c))){
count++;
}
if(arrayList.contains(String.valueOf(c))){
continue;
}
System.out.println(“字符:”+String.valueOf(c)+“====”+“个数”+count);
arrayList.add(String.valueOf(c));
}
}
/**
*@author米兜
*@param
*@description4.巧用Matcher
*@date2020/6/2622:51
*/
//如果要不区分大小写,则compile(minstr,CASE_INSENSITIVE)
publicstaticvoidcount4(Stringstr){
ArrayList<String>arrayList=newArrayList<>();
for(charc:str.toCharArray()){
intcount=0;
Matcherm=Pattern.compile(String.valueOf(c)).matcher(str);
if(arrayList.contains(String.valueOf(c))){
continue;
}
while(m.find()){
count++;
}
System.out.println(“字符:”+String.valueOf(c)+“====”+“个数”+count);
arrayList.add(String.valueOf(c));
}
}
}
二、运行结果
———–1.数组的索引法【start】———–
字符:a====个数2
字符:c====个数1
字符:d====个数1
字符:e====个数1
字符:g====个数2
字符:h====个数2
字符:i====个数1
字符:m====个数1
字符:n====个数3
字符:o====个数1
字符:u====个数5
字符:x====个数1
字符:y====个数1
字符:z====个数1
———–1.数组的索引法【end】———–
———————————————
———–2.使用流(使用TreeMap)【start】———–
字符:a====个数2
字符:c====个数1
字符:d====个数1
字符:e====个数1
字符:g====个数2
字符:h====个数2
字符:i====个数1
字符:m====个数1
字符:n====个数3
字符:o====个数1
字符:u====个数5
字符:x====个数1
字符:y====个数1
字符:z====个数1
———–2.使用流(使用TreeMap)【end】———–
———————————————
———–3.巧用split【start】———–
字符:g====个数2
字符:u====个数5
字符:a====个数2
字符:n====个数3
字符:z====个数1
字符:h====个数2
字符:c====个数1
字符:e====个数1
字符:x====个数1
字符:y====个数1
字符:m====个数1
字符:i====个数1
字符:d====个数1
字符:o====个数1
———–3.巧用split【end】———–
———————————————
———–4.巧用Pattern【start】———–
字符:g====个数2
字符:u====个数5
字符:a====个数2
字符:n====个数3
字符:z====个数1
字符:h====个数2
字符:c====个数1
字符:e====个数1
字符:x====个数1
字符:y====个数1
DisconnectedfromthetargetVM,address:’127.0.0.1:53939′,transport:’socket’
字符:m====个数1
字符:i====个数1
字符:d====个数1
字符:o====个数1
———–4.巧用Pattern【end】———–
Processfinishedwithexitcode0
三、总结
冰冻三尺非一日之寒,滴水石穿非一日之功。