题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
分析:翻看JAVA的API,我们可以发现有很多输入类,这里我们选取Scanner类来进行输入;至于统计字符的类,JAVA的API也给我们提供了,比如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-9 是 Digit ,比如 /u0660 ,好像是阿拉伯文,也是 Digit
所以要判断英文字母或者数字还是笨一点, c>='a'&&c<='z' || c>='A'&&c<='Z'吧。