/*
可以考虑使用map集合完成。
*/
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
class CollectionDemo
{
public static void main(String[] args)
{
String str = "2,1,3,4,7,3,2,1,1,3,5,2";
System.out.println(str);
String maxValue = getCharCount(str);
System.out.println(maxValue);
}
/*
思路:
因为字符和次数之间存在映射关系,想到了map集合。,
获取字符串中的每一个字母,并把字符作为键,去查map集合。
如果没有对应的值,将该字符作为键。将1作为值存储到map集合中。
如果有对应的值,将该值取出并自增,将该字符和自增后的结果存储到map集合中。
这样,键重复出现,新值会覆盖旧值。
记录了这个字符的最新出现的次数。
当字符串中的字符都遍历完成后,map集中就记录所有字母的次数。
步骤:
1,定义map集合。
2,将字符串变成字符数组。
3,遍历字符数组。
4,将遍历到的每一个字母作为键去查map集合。
5,对通过该键获取到的值进行判断。
*/
public static String getCharCount(String str)
{
//1,定义map集合。所以使用TreeMap。
//集合中的键的类型时String,值的类型时Integer、
Map map = new TreeMap();
//2,将字符串变成字符串数组。
String[] strs = str.split(",");
int count = 0;
//3,遍历数组。
for(int x=0; x<strs.length; x++)
{
int in = Integer.parseInt(strs[x]);
if(!(in>=0 && in<=9))
continue;
//将遍历到的字符作为键,去查map集合中对应的值。
Integer value = (Integer)map.get(strs[x]);
if(value!=null)
{
count = value;
}
count++;
map.put(strs[x],count);
count = 0;
}
return getMaxCount(map);
}
//获取最大次数和字符
private static String getMaxCount(Map map) {
Set keySet = map.keySet();
//返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型
String[] arr = (String[]) keySet.toArray(new String[keySet.size()]);
Map valueMap = new TreeMap();
Integer max =0;
String key ="";
for (int ii=0;ii<arr.length;ii++) {
if((Integer)map.get(arr[ii])>=max) {
key = arr[ii];
max = (Integer)map.get(arr[ii]);
valueMap.put(key, max);
}
}
//如果出现的最大次数相同,就比较出现最大次数的数值
if(valueMap.size()==1) {
System.out.println("出现次数最多且数值最大的字符是:key="+key+",其出现次数是max="+max);
} else if(valueMap.size()>1) {
Set keys = valueMap.keySet();
//返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
String[] arr2 = (String[]) keys.toArray(new String[keys.size()]);
for(int jj=0;jj<arr2.length-1;jj++) {
if(Integer.parseInt(arr2[jj])>Integer.parseInt(arr2[jj+1])) {
key = arr2[jj];
}
}
System.out.println("出现次数最多且数值最大的字符是:key="+key+",其出现次数是max="+max);
}
return key;
}
}
使用集合做的,希望对楼主有用 |