`

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

阅读更多

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

分析:翻看JAVAAPI,我们可以发现有很多输入类,这里我们选取Scanner类来进行输入;至于统计字符的类,JAVAAPI也给我们提供了,比如Character类,在该类中有很多方法,可以用来判断各种字符,因此我们可以用这两个类来完成这个题目。

 

代码:

 

public class TestThree {

	public static void main(String[] args) {
		int letterSum = 0;
		int blankSum = 0;
		int numberSum = 0;
		int otherSum = 0;
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入字符串:");
		
		String str = scan.nextLine();
		
		char[] ch = str.toCharArray();
		
		for(int i = 0 ; i < ch.length; i++){
			if(Character.isLetter(ch[i])){
				letterSum++;
			}else if(Character.isSpaceChar(ch[i])){
				blankSum++;
			}else if(Character.isDigit(ch[i])){
				numberSum++;
			}else{
				otherSum++;
			}
		}
		
		System.out.println("输入的字符串中共有字母:"+letterSum);
		System.out.println("输入的字符串中共有空格:"+blankSum);
		System.out.println("输入的字符串中共有数字:"+numberSum);
		System.out.println("输入的字符串中共有其他字符:"+otherSum);
	}
}

  

 

通过输入的内容进行分析,都ok。但是有一点想不到的是,我们输入的中文字符在统计的时候也给我们算作了字母里面,这让我百思不得其解。后来通过查阅源代码和相关资料才发现:这里的Letter不只是指英文字母。事实上任何语言的字符都可以。

有一个例子:

 

for(char c='/u4E00';c<='/u9FA5';c++){
   if(!Character.isLetter(c)){
       System.out.println("汉字是Letter");
   }else{
             System.out.println("汉字不是Letter");
 }
}
System.out.println(Character.isLetter('さ'));
System.out.println((int)'さ');
System.out.println(Character.isDigit('/u0660'));
System.out.println('/u0660');

 可以看到汉字和日文字符都是

 

Letter,另外Digit也类似,不只是0-9Digit,比如/u0660,好像是阿拉伯文,也是Digit

所以要判断英文字母或者数字还是笨一点, c>='a'&&c<='z' || c>='A'&&c<='Z'吧。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics