如何获取字符串中相同字符出现的次数

时间:2023-01-04 12:31:42

任务:

1、统计字符数组中相同数据个数。

2、需要用set实现。

3、需要用iterator实现。

第一次出现时,我只是简单的在纸上写了点思路,事后发现除了一些具体属性可能因为不熟悉之外,大体还是成功的:

我将思路化为代码后实现如下:

public static void main(String[] args) {
String[] arrays=new String[]{"zhangsan","andi","andi","zhangsan","wangwu","pianliu"};
Arrays.sort(arrays, new SortComparator());
Set<String> setData=new HashSet<String>();
for(int i=0;i<arrays.length;i++){
setData.add(arrays[i]);//具备排重功能
}
//计算相同数据出现的次数
Map<String,Integer> countMap=new HashMap<String,Integer>();
for(int j=0;j<arrays.length;j++){
if(countMap.containsKey(arrays[j])){//如果存在那么获取value自增
int count=countMap.get(arrays[j])+1;
countMap.put(arrays[j], count);
}else{
countMap.put(arrays[j], 1);
}
}
//遍历set
Iterator<String> it= setData.iterator();//不重复数据
while(it.hasNext()){
String data=it.next();
System.out.print(data+" = "+countMap.get(data));
System.out.println();
}
}
很明显,代码中我添加了一个比较类SortComparator,本来我打算将数据统计完成后,按照字母从小到大的方式输出,虽然是画蛇添脚,但是终归还是比较有意思,上面的代码并没有实现到这点,主要原因是set和map存储数据是无序的,如果非要实现,需要在代码末端进行修改。

class SortComparator implements Comparator<String>{

public int compare(String o1, String o2) {
char c1 = ((String) o1).charAt(0);
char c2 = ((String) o2).charAt(0);
return c1-c2;
}

}
扩展:该功能可以用于统计文章中的相同字数或者词重复出现多少次。