ArrayList和HashMap的结合使用

2.分析以下需求,并用代码实现:
 (1)利用键盘录入,输入一个字符串
 (2)统计该字符串中各个字符的数量
 (3)如:
  用户输入字符串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
  程序输出结果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6)

 基本解决思路:
    1,用ArrayList接收输入的字符
    2,对输入的字符串转换成字符数组,统计各个字符的总出现数,
    3,将 字符:字符个数    存储到hashMap中
    4,遍历输入hashmap表即可
  

主程序大致框架:

public static void main(String[] args) {
  List array = new ArrayList();
  Map map = new HashMap();
  
  function_1(array);//键盘接收字符串
  function_2(array,map);//将字符串转换成字符数组,并将统计的字符和字符个数存储到HashMap中
  function_3(map); //遍历HashMap,输出最后结果
  
 }

funciton_1()的主要代码如下:

	//接收字符串函数,输入字符串,直到输入  end 为止
	public static void function_1(List array) {
		Scanner sc = new Scanner(System.in);
		while(true) {
			String str = sc.next();
			if("end".equals(str)) {
				sc.close();
				break;
			}
			array.add(str);
			
		}
		
	}

function_2()的主要代码如下:
public static void function_2(List array,Map map) {
		
		//创建字符数组接收字符串转换过来的字符数组
		char[] ch = array.toString().toCharArray();
		for (int i = 0; i < ch.length; i++) {
			System.out.print(ch[i]);
		}
		System.out.println("\n===================================");
		
		
		int[] number = new int[ch.length]; 
				
		//双重for循环统计字符个数
		//由于String.toCharArray()是把"[","]",给算上的,所以将最开始和最后的括号去掉
		for (int i = 1; i < ch.length-1; i++) {
			int count = 1; //字符最开始有一个
			for (int j = 1; j < ch.length-1; j++) {
				if(ch[i] == ch[j])
					number[i] = count++;
			}
		}
		
		//将统计的字符个数还有数字添加到HashMap中
		//由于String.toCharArray()是把"[","]",给算上的,所以将最开始和最后的括号去掉
		for (int i = 1; i < number.length-1; i++) {
			map.put(ch[i], number[i]);
		}
	}

function_3()的主要代码如下:

	public static void function_3(Map map) {
		//遍历map集合,输出相应的键值对
		for(Map.Entry entry : map.entrySet()) {
			char c = entry.getKey();
			Integer in = entry.getValue();
			System.out.print(c+"("+in+")"+" ");
		}
			
	}

我的程序的运行结果如下:
ArrayList和HashMap的结合使用_第1张图片



 

你可能感兴趣的:(JavaSE学习)