java:使用字符串切割实现对指定字符个数的统计

题目:给定一串字符,要求统计其中字母“a-z"和"A-Z”的个数,输出形式为“a()b()c()......A()B()C()......”

package com.yidongxueyuan.shili;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TestDemo_01{
	public static void main(String []args) {
		String str = "AZazcdsiuaga;bdsgcu;duggvhjbjvuvtzA;Aa";
		Map<String,Integer> m = new TreeMap<String,Integer>();
		//初始化字符型c1,为字符串切割做准备
		char c1 = 'A';
		//初始化字符串数组s1,为接收切割出来的字符串做准备
		String []s1 = null;
		//循环切割
		//按A-Z切割
		for(;c1<='Z';c1++){
			s1 = str.split(String.valueOf(c1));
			//注意:由于字符串切割时,会抛弃最后的空串,因此,如果最后的元素不是特殊字符,
			//则会造成少记一次数,因此要对字符串中最后一个字符进行判断
			int len = s1.length;
			if(c1 == str.charAt(str.length()-1))
				len++;
			//切割完毕,将被切的字母以String形式放入TreeMap映射中
			m.put(String.valueOf(c1),len-1);
			//判断,如果该字母不存在,则字符串未进行切割,那么字符串长度为1,减一就是0
			if(m.get(String.valueOf(c1))==0)
				m.remove(String.valueOf(c1));//移除不存在的元素
		}
		
		//按a-z切割
		for(c1 = 'a';c1<='z';c1++){
			s1 = str.split(String.valueOf(c1));
			//这里同上,为了使记数准确
			int len = s1.length;
			if(c1 == str.charAt(str.length()-1))
				len++;
			//切割完毕,将被切的字母以String形式放入TreeMap映射中
			m.put(String.valueOf(c1),len-1);
			//判断,如果该字母不存在,则字符串未进行切割,那么字符串长度为1,减一就是0
			if(m.get(String.valueOf(c1))==0)
				m.remove(String.valueOf(c1));//移除不存在的元素
		}
		show(m);
	}
	static void show(Map<String, Integer> m)
	{
		Set<String> keySet = m.keySet();
		Object[] array =  keySet.toArray();
		for(int i = 0;i<array.length;i++)
			System.out.print(array[i]+"("+m.get(array[i])+")");
		System.out.println();
		
	}
}

运行结果如下:


注意:

      由于字符串切割时,会抛弃最后的空串,因此,如果最后的元素不是特殊字符,则会造成少记一次数,因此要对字符串中最后一个字符进行判断。


猜你喜欢

转载自blog.csdn.net/baidu_38760069/article/details/80504305