当前位置: 代码迷 >> 综合 >> 【java】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。
  详细解决方案

【java】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。

热度:65   发布时间:2024-01-28 15:41:01.0

例如:

从控制台输入 hello,输出: 出现次数最多的字符是 'l',出现了2次。

从控制台输入 helle,输出: 出现次数最多是字符出 'l'和'e',出现了2次

 

package day0715.work;import org.junit.Test;import java.util.*;public class work01 {public static void main(String[] args) {String str = "";Scanner scan = new Scanner(System.in);System.out.println("请输入一个字符串:");//从控制台输入一个字符串str=scan.nextLine();//     System.out.println(str.length());//输出方法recordAppearMostFrequently(str);}//【难】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。public static void recordAppearMostFrequently(String str){Map<Character,Integer> map = new HashMap<>();//设置一个map集合用来存储字符和字符出现的次数的集合int count=0;//count用来单个字符出现的次数int []sum=new int[str.length()];//sum用来记录所有的字符出现的次数//两层循环遍历for(int i=0;i<str.length();i++){for(int j=0;j<str.length();j++){if(str.charAt(i)==str.charAt(j))count++;}sum[i]=count;count=0;//count归零}//打印数组://printArray(sum);int maxIndex=maxIndexOfArray(sum);//求到出现次数最多的那个值的下标map.put(str.charAt(maxIndex),sum[maxIndex]);//存入map集合for(int i=0;i<sum.length;i++){//判断条件if(sum[i]==sum[maxIndex]&&str.charAt(i)!=str.charAt(maxIndex)){map.put(str.charAt(i),sum[i]);}}//遍历map集合System.out.print("出现次数最多的字符是");//遍历map集合keySet(map);System.out.println("出现了"+map.get(str.charAt(maxIndex))+"次.");}//遍历数组public static void printArray(int[] array){for(int i:array)System.out.print(i+" ");System.out.println();}//使用keySet遍历集合public static void keySet(Map<Character,Integer> map){//1.获取存储了所有的键的集合Set<Character> keys=map.keySet();//2.遍历整个Set集合for(Character key:keys){//2.1通过键获取值int value = map.get(key);System.out.print("'"+key+"'"+",");// System.out.println("key="+key+",value="+value);}}//求最大值的下标public static int maxIndexOfArray(int[] array){int max=Integer.MIN_VALUE;int maxIndex=0;for(int i=0;i<array.length;i++){if(max<array[i]){max=array[i];maxIndex=i;}}return maxIndex;}
}