用java实现输入一行字符,分别统计出其中中文汉字、英文字母、空格、数字和其它字符的个数
1.分析
1.1 如何进行输入?
需要输入一行字符意味着需要建立一个Scanner对象,用来获取接收的内容
而接收的内容中包含空格,因而选择Scanner对象中的nextLine()方法
注意:Scanner对象名.next()方法是以空格为分隔符进行相应输出的。
1.2 如何统计字符数量?
1.2.1 如何获取到每个字符?
a.把得到的一行字符String对象通过toCharArray方法转换成字符数组
b.然后对字符数组进行遍历,即可获取每个字符数组元素个数
1.2.2 如何辨别是哪种字符?(字符判断规则)
a 中文汉字判断规则如下:
是否属于中日韩越统一表意文字(CJK_UNIFIED_IDEOGRAPHS),若是,则代表是中文
b 英文字母判断规则如下:
是否属于小写字母的ASCII值范围([97,122])或者大写字母的ASCII值范围([65,90])
c 空格判断规则如下:
是否等于空格对应的ASCII值(32)
d 数字判断规则如下:
是否属于数字对应的ASCII值范围[48,57]
f 数字判断规则如下:
a、b、c、d条件均不满足,就代表其是其他字符
2.思路总结
a.定义一个Scanner对象,通过.nextLine方法来接收输入的一行字符对应的字符串
Scanner scanner=new Scanner(System.in);String a=scanner.nextLine();
b.对接收到的字符串通过toCharArray方法来拆分成字符数组
char[] charArrays=a.toCharArray();
c.对字符数组进行遍历,在这个过程中,对每个字符内容进行判断,对符合条件的计数器进行加1
for(int i=0;i<charArrays.length;i++){if(Character.UnicodeBlock.of(charArrays[i])==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS){//判断是否是中文汉字,若是中文计数器+1,//此时无需进行后面的判断操作,直接开启(continue)下一次循环chineseCount++;continue;}if((charArrays[i]>=65&&charArrays[i]<=90)||(charArrays[i]>=97&&charArrays[i]<=122)){//判断是否为英文字母, A-Z 65-90 a-z 97-122englishCount++;continue;}//空格的ascii码值是32if(charArrays[i]==32){blankCount++;continue;}//数字0~9对应的ASCII码范围为[48,57]if((charArrays[i]>=48&&charArrays[i]<=57)){//判断是否为数字numberCount++;continue;}//当不是中文汉字、英文字母、空格、数字时,那么就代表它是其他字符了otherCharacterCount++;}
d.输出相应的结果
System.out.println("中文汉字的个数为: "+chineseCount);System.out.println("英文字母的个数为: "+englishCount);System.out.println("空格的个数为: "+blankCount);System.out.println("数字的个数为: "+numberCount);System.out.println("其他字符的个数为: "+otherCharacterCount);
3.源代码
import java.util.Scanner;public class Demo {public static void main(String[] args) {System.out.println("输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。");//本次使用Scanner里面的.nextLine();因为一行字符中有空格,next()方法读取不了空格Scanner scanner=new Scanner(System.in);String a=scanner.nextLine();char[] charArrays=a.toCharArray();//System.out.println((int)'a');Character.UnicodeBlock ub=null;int chineseCount=0,englishCount=0,blankCount=0,numberCount=0,otherCharacterCount=0;/* chineseCount代表中文汉字的个数englishCount代表英文汉字的个数blankCount代表空格的个数numberCount代表数字的个数otherCharacterCount代表其他字符的个数*/for(int i=0;i<charArrays.length;i++){if(Character.UnicodeBlock.of(charArrays[i])==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS){//判断是否是中文汉字chineseCount++;continue;}if((charArrays[i]>=65&&charArrays[i]<=90)||(charArrays[i]>=97&&charArrays[i]<=122)){//判断是否为英文字母, A-Z 65-90 a-z 97-122englishCount++;continue;}//空格的ascii码值是32if(charArrays[i]==32){blankCount++;continue;}//数字0~9对应的ASCII码范围为[48,57]if((charArrays[i]>=48&&charArrays[i]<=57)){//判断是否为数字numberCount++;continue;}//当不是中文汉字、英文字母、空格、数字时,那么就代表它是其他字符了otherCharacterCount++;}System.out.println("中文汉字的个数为: "+chineseCount);System.out.println("英文字母的个数为: "+englishCount);System.out.println("空格的个数为: "+blankCount);System.out.println("数字的个数为: "+numberCount);System.out.println("其他字符的个数为: "+otherCharacterCount);}}