题目:输入一行字符,分别统计出其中数字、英文字母、数字和其他字符的个数


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 + " 个。");

    }
}


上面这道题目,在判断输入的字符这个过程中,产生不不少问题:

  1. str.getBytes()拿到的是字节byte类型,而从键盘输入进来的确实字符char类型,

    就相当于(byte)'2',根据Unicode编码它直接输出的结果会是50。

    刚开始我没有重新转为字符,就这样判断if (ch >= 0 && ch <= 9),

    50当然不会再0~9之间,所以要有char ch = (char) buf[i];这个转换,

    并且判断条件也是要跟char字符进行比较。


  2. if判断没有写好,刚开始不是用if……else spacer.gifif……else去写,导致最后其他字符的数目判断出错。例如:数字1判断完第一个if后,它继续执行,也会others++。