标签:英文字母 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