题目:输入一行字符,分别统计出其中数字、英文字母、数字和其他字符的个数
package Test;
import java.io.*;
//需求:输入一行字符,分别统计出其中数字、英文字母、数字和其他字符的个数
public class CountTest {
public static void main(String[] args) throws Exception {
System.out.println("请输入一个包含数字、英文字母和其他字符的字符串:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
byte[] buf = str.getBytes();
int num = 0;
int letters = 0;
int others = 0;
for (int i = 0; i < buf.length; i++) {
char ch = (char) buf[i];
System.out.println(ch);
if (ch >= '0' && ch <= '9') {
num++;
}
else if (ch >= 'a' && ch <= 'z') {
letters++;
}
else if (ch >= 'A' && ch <= 'Z') {
letters++;
}
else{
others++;
}
}
System.out.println("您输入的字符串是:" + str);
System.out.println("数字有: " + num + " 个,字母有: " + letters + " 个,其他字符有: "
+ others + " 个。");
}
}
上面这道题目,在判断输入的字符这个过程中,产生不不少问题:
str.getBytes()拿到的是字节byte类型,而从键盘输入进来的确实字符char类型,
就相当于(byte)'2',根据Unicode编码它直接输出的结果会是50。
刚开始我没有重新转为字符,就这样判断if (ch >= 0 && ch <= 9),
50当然不会再0~9之间,所以要有char ch = (char) buf[i];这个转换,
并且判断条件也是要跟char字符进行比较。
if判断没有写好,刚开始不是用if……else if……else去写,导致最后其他字符的数目判断出错。例如:数字1判断完第一个if后,它继续执行,也会others++。
转载于:https://blog.51cto.com/sesedese/1585652