运用正则表达式:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CountTest {
public static void main(String args[]) {
String str = "asdvdfdDERE123ABCD0012587我一二三四五";
System.out.println("Numbers:" + countNumber(str));
System.out.println("Letters:" + countLetter(str));
System.out.println("Chinese:" + countChinese(str));
}
public static int countNumber(String str) {
int count = 0;
Pattern p = Pattern.compile("\\d");
Matcher m = p.matcher(str);
while(m.find()){
count++;
}
return count;
}
public static int countLetter(String str) {
int count = 0;
Pattern p = Pattern.compile("[a-zA-Z]");
Matcher m = p.matcher(str);
while(m.find()){
count++;
}
return count;
}
public static int countChinese(String str) {
int count = 0;
Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]");
Matcher m = p.matcher(str);
while(m.find()){
count++;
}
return count;
}
}
注意:
在linux下用的是unicode,每个汉字是三个字节,在windows下常用gb2312,每个汉字两个字节
统计汉字个数的其他方法:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class hdu_2030 {
public static void main(String[] args) throws IOException {//似乎可以
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.valueOf(br.readLine());
while(n-->0){
String s =br.readLine();
System.out.println(count(s));
}
}
public static int count(String text) {
int len = text.length();
byte[] bytStr = text.getBytes();
int intStr, count = 0;
for(int i = 0; i < bytStr.length; i++){
intStr = bytStr[i];
if(intStr < 0){//JAVA中中文字符是负的BYTE值。
count++;
i++; //中文字符是双字节。
}
}return count;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.valueOf(br.readLine());
while(n-->0){
String s =br.readLine();
int i,count=0;
int len =s.length();
for(i=0;i<len;i++){
char a=s.charAt(i);
if(a>126 ||a<32)
count++;
}System.out.println(count);
}
}
}