统计打印字符串arg中每个字符出现的次数,如果arg没有字符则打印“empty string" 如果arg不为空 1.打印arg中每个字符出现的次数 2.按出现次数统计每个出现次数的数字有哪些字符,如1-[务,疫,精],2-[的,优,化]...*3.将第2题的出现次数倒序排列
1.代码
方法一:
public class MyStringUtil {
public static void main(String[] args) {
countCharTimes("11月11日1,国务院联防联控机制综合组发布《关于进一步优化新冠肺炎疫情防控措施科学精准做好防控工作的通知》,公布进一步优化防控工作的二十条措施。一");
// countCharTimes("");
}
/**
* *统计打印字符串arg中每个字符出现的次数,如果arg没有字符则打印“empty string"
* 如果arg不为空
* *1.打印arg中每个字符出现的次数
* *2.按出现次数统计每个出现次数的数字有哪些字符,如1-[务,疫,精],2-[的,优,化]...*3.将第2题的出现次数倒序排列
*/
public static void countCharTimes(String arg){
if ("".equals(arg) || arg==null || arg.trim().equals("")){
System.out.println("empty string");
return;
}
List<String> list=new ArrayList<String>(Arrays.asList(arg.split("")));
List<String> strings = new ArrayList<String>();
//统计字符串出现的次数
for (int i = 0; i < list.size();) {
int count=1;
for (int j = 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j)) || list.get(i) == list.get(j)){
count++;
list.remove(j);
j--;
}
}
strings.add(count+":"+list.get(i));
list.remove(i);
}
//统计出现相同次数的字符
for (int i = 1; strings.size() > 0; i++) {
String s = i+"=[";
for (int j = 0; j < strings.size(); j++) {
String[] split = strings.get(j).split(":");
String string=split[0];
if (Integer.parseInt(string) == i){
if (j == strings.size()-1){
s=s+split[1];
}else {
s=s+split[1]+",";
}
strings.remove(j);
j--;
}
}
s=s+"]";
list.add(s);
}
//打印出按出现次数统计每个出现次数的数字有哪些字符
for (int i = list.size()-1; i >= 0; i--) {
System.out.println(list.get(i));
}
}
}
方法二:
public class MyStringUtil {
public static void main(String[] args) {
countCharTimes("11月11日1,国务院联防联控机制综合组发布《关于进一步优化新冠肺炎疫情防控措施 科学精准做好防控工作的通知》,公布进一步优化防控工作的二十条措施。一");
}
/**
* 统计打印字符串arg中每个字符出现的次数,如果arg没有字符则打印“empty string”
* 如果arg不为空
* 1. 打印arg中每个字符出现的次数
* 2. 按出现次数统计每个出现次数的数字有哪些字符,如 1-[务, 疫, 精], 2-[的, 优, 化]...
* 3. 将第2题的出现次数倒序排列
* */
public static void countCharTimes(String arg){
if (arg == null || arg.isEmpty()){
System.out.println("empty string");
}else{
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < arg.length(); i++){
Integer n = map.get(arg.charAt(i));
if (n == null) n = 0;
n++;
map.put(arg.charAt(i), n);
}
System.out.println(map);
Map<Integer, List<Character>> map2 = new TreeMap<>();
Iterator<Character> iter = map.keySet().iterator();
while(iter.hasNext()){
Character c = iter.next();
Integer n = map.get(c);
List<Character> list = map2.get(n);
if (list == null) list = new ArrayList<>();
list.add(c);
map2.put(n, list);
}
System.out.println(map2);
Set<Integer> sortSet = new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o2 == 4) return 1;
if (o2 > o1) return 1;
else return -1;
}
});
sortSet.addAll(map2.keySet());
Iterator<Integer> iter2 = sortSet.iterator();
System.out.println();
System.out.println("出现次数倒序打印:");
while (iter2.hasNext()){
Integer value = iter2.next();
System.out.println(value + ": " + map2.get(value));
}
}
}
}
2.实现步骤
1.统计字符出现的次数,count++,之后移除;
2.统计拥有相同次数的字符串;
3.倒序打印出每个出现次数的数字有哪些字符。
3.结果
4.遇到的错误
1.UnsupportedOperationException异常解析
出现错误的原因:不支持所请求的操作,ArrayList的add方法需要重写
错误代码
List<String> list=new ArrayList<String>(); list = Arrays.asList(arg.split(""));
2.解决方法
-
List<String> list = new ArrayList<>(Arrays.asList(strings));
-
List<String> list = new ArrayList<>(); list.addAll(Arrays.asList(strings));