本人采用把字符串转换成int数组,这样不用把每个字母都进行循环,从而提速程序
/*统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数/
/输入格式:
通过键盘输入一行字符(任意字符)
输出格式:
统计一行字符串中的中英文字母个数、空格个数、数字个数、其他字符个数/
输入样例:
rwrwewre2345asdJSJQI%^&(& &sdf YY( 2342-k’
结尾无空行
输出样例:
字母个数:22
数字个数:8
空格个数:5
其他字符个数:10
结尾无空行
import java.util.Scanner;
public class Main{
private static String str;
private static int value[];
private static int count,letter,blank,num,other,sum;
public Main(){
value = new int[1000];
Scanner in = new Scanner(System.in);
str = in.nextLine();
count = str.length();
//将字符串统计今value数组中
//数组下标(char)i出现了value[i]次
for(int i=0;i<count;i++){
value[(int)str.charAt(i)]++;
}
}
//计算字母个数
public int sum_letter(int Value[]){
sum = 0;
for(int i=(int)'a';i<=(int)'z';i++) {
sum += Value[i];
}
for(int i=(int)'A';i<=(int)'Z';i++){
sum += Value[i];
}
return sum;
}
//计算数字个数
public int sum_num(int Value[]){
sum = 0;
for(int i=(int)'0';i<=(int)'9';i++){
sum += Value[i];
}
return sum;
}
//计算空格个数
public int sum_blank(int Value[]){
return Value[(int)' '];
}
public static void main(String[] args) {
Main main = new Main();
letter = main.sum_letter(value);
num = main.sum_num(value);
blank = main.sum_blank(value);
//计算其他字符个数
other = str.length()-letter-num-blank;
//输出
System.out.println("字母个数:"+letter);
System.out.println("数字个数:"+num);
System.out.println("空格个数:"+blank);
System.out.print("其他字符个数:"+other);
}
}