方法一
根据ASCII码,第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母。
/**
* 通过ASCII码进行判断
* @param c
*/
public static void function1(char[] c){
int num = 0;//数字个数
int letter = 0;//字母个数
int space = 0;//空格个数
int other = 0;//其他个数
for(int i=0;i<c.length;i++){
char temp = c[i];
if(temp >= 48 && temp <= 57){//判断是否为数字
num++;
}else if((temp >= 65 && temp <= 90) || (temp >= 97 && temp <= 122)){//判断是否为字母
letter++;
}else if(temp == 32){//判断是否为空格
space++;
}else{
other++;
}
}
System.out.println("数字个数:"+num+"\t字母个数:"+letter+"\t空格个数:"+space+"\t其他个数:"+other);
}
方法二
直接判断字符。
/**
* 直接通过字符判断
* @param c
*/
public static void function2(char[] c){
int num = 0;//数字个数
int letter = 0;//字母个数
int space = 0;//空格个数
int other = 0;//其他个数
for(int i=0;i<c.length;i++){
char temp = c[i];
if(temp >= '0' && temp <= '9'){//判断是否为数字
num++;
}else if((temp >= 'A' && temp <= 'Z') || (temp >= 'a' && temp <= 'z')){//判断是否为字母
letter++;
}else if(temp == ' '){//判断是否为空格
space++;
}else{
other++;
}
}
System.out.println("数字个数:"+num+"\t字母个数:"+letter+"\t空格个数:"+space+"\t其他个数:"+other);
}
方法三
通过正则表达式
public static void function3(char[] c){ //这里方便统一测试,我还是传入的字符数组
int num = 0;//数字个数
int letter = 0;//字母个数
int space = 0;//空格个数
int other = 0;//其他个数
String reg1 = "[a-zA-Z]";
String reg2 = "[0-9]";
String reg3 = "\\s";
for(int i=0;i<c.length;i++){
String temp = String.valueOf(c[i]);
if(temp.matches(reg2)){//判断是否为数字
num++;
}else if(temp.matches(reg1)){//判断是否为字母
letter++;
}else if(temp.matches(reg3)){//判断是否为空格
space++;
}else{
other++;
}
}
System.out.println("数字个数:"+num+"\t字母个数:"+letter+"\t空格个数:"+space+"\t其他个数:"+other);
}
main方法
public static void main(String[] args) {
System.out.println("请输入一段包含数字、字母、空格的字符串:");
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
//转化为字符数组
char[] c = string.toCharArray();
//调用方法判断
System.out.println("方法一");
function1(c);
System.out.println("方法二");
function2(c);
System.out.println("方法三");
function3(c);
}
运行结果