题外话:最近在笔试中遇到了这个题,看着好像做过,但是中文和特殊符号确实有点难区分。又想着再用啥if('A'<str<'Z')这样比较low的判断,未免就太掉价了。在csdn上搜了大半天,瞅了瞅都不是很满意,就自己写了一个,认为目前为之最起码不是掉价的代码,大家可以参考一下,话不多说,上代码!
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CountChar {
public static void main(String[] args) {
//先获取标准输入,Scanner类,生成一个input对象
Scanner input = new Scanner(System.in);
//用对象调用方法,由于我们要输入的是字符串,因此是String类型的
String str = input.next();
//把输入的字符串转为字符数组,目的是为了一个字符一个字符的对比
char[] arr = str.toCharArray();
//利用正则表达式通过Unicode编码来判断汉字和特殊字符
String regEx = "[\u4e00-\u9fa5]";
//Pattern pattern = Pattern.compile(regEx);
int bigCount = 0; //统计大写字母的个数
int smallCount = 0; //统计小写字母的个数
int numberCount = 0; //统计数字的个数
int chineseCount = 0; //统计中文汉字的个数
int otherCount = 0; //统计特殊字符的个数
String temp; //这个用于在if里调用String类里的判断方法,属于中间引用量吧,后面就明白了
for (int i = 0; i < arr.length; i++) {
//判断是否为大写字母,利用的是javaAPI文档里的方法
if (Character.isUpperCase(arr[i])) {
bigCount++;
continue;
}
//判断是否为数字,利用的javaAPI文档里的方法
if (Character.isDigit(arr[i])) {
numberCount++;
continue;
}
//判断是否为大写字母,利用的是javaAPI文档里的方法
if (Character.isLowerCase(arr[i])) {
smallCount++;
continue;
}
//下面这些注释,是另一种方法,不过输入用例有bug。
/*Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
}
temp = String.valueOf(arr[i]);*/
temp = String.valueOf(str.charAt(i));
//判断是否为中文汉字,统计其中的个数
if (temp.matches(regEx)) {
//matcher.find()
chineseCount++;
continue;
}
//其他的都判断完了,该跳出本次循环的都跳出了,没有跳出的就是剩下的特殊字符了。
otherCount++;
}
System.out.println("大写字母的个数:"+bigCount);
System.out.println("小写字母的个数:"+smallCount);
System.out.println("数字的个数:"+numberCount);
System.out.println("汉字的个数:"+chineseCount);
System.out.println("特殊字符的个数:"+otherCount);
}
}
代码写的还有注释,大家都明白了吧。再插句嘴,那个判断中文字符的,我用我注释的方法,如果你要先输入中文再接着输入特殊字符,它会自动识别为全部是中文。我纠结了半天。后来在网上看到的目前用的方法不会出现那个问题。我估计应该是java自己封装的方法有点毛病。最后,大家感觉对自己有帮助,请为俺点个赞,让俺也知道自己的辛苦有用