标签:英文字母 package letters import public
题目:输入一行字符,分别统计出其中数字、英文字母、数字和其他字符的个数
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++。
标签:英文字母 package letters import public
原文地址:http://sesedese.blog.51cto.com/9595075/1585652