题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:使用String.matches(regex)来判断字符串中每个字符的种类
/*
*given a input of String, count statistics.
*the return array of 2 dimension gives such statistics as
* the total number of Chinese chars, English chars
* followed by that of blank space, numbers and other chars
*/
public static String[][] getComp(String str){
//a table with 5 rows and 2 columns
String[][] comp = new String[5][2];
//type of chars
comp[0][0] = "Chinese chars";
comp[1][0] = "English chars";
comp[2][0] = "Blank space";
comp[3][0] = "Numbers";
comp[4][0] = "Other chars";
//statics to be filled
int countChinese = 0;
int countEnglish = 0;
int countNumber = 0;
int countSpace = 0;
int countOther = 0;
char[] arrayChar = str.toCharArray();
String[] arrayString = new String[str.length()];
for(int i=0;i<str.length();i++)
arrayString[i] = str.valueOf(arrayChar[i]);
for(String s:arrayString){
if(s.matches("[\u4e00-\u9fa5]"))
countChinese++;
else if(s.matches("[a-zA-Z]"))
countEnglish++;
else if(s.matches("[0-9]"))
countNumber++;
else if(s.matches("\\s"))
countSpace++;
else
countOther++;
}
comp[0][1] = String.valueOf(countChinese);
comp[1][1] = String.valueOf(countEnglish);
comp[2][1] = String.valueOf(countSpace);
comp[3][1] = String.valueOf(countNumber);
comp[4][1] = String.valueOf(countOther);
return comp;
}
测试:
public static void main(String[] args){
String[][] str = StringComp.getComp("大世界1234 h e y @#!");
StringBuffer strBfr = new StringBuffer();
for(int i=0;i<str.length;i++){
for(int j=0;j<str[i].length;j++){
strBfr.append(str[i][j]+" ");
}
strBfr.append("\n");
}
System.out.println(strBfr);
}
输出:
Chinese chars 3
English chars 3
Blank space 4
Numbers 4
Other chars 3