当前位置: 代码迷 >> J2SE >> 书上题目 04-14解决办法
  详细解决方案

书上题目 04-14解决办法

热度:138   发布时间:2016-04-24 01:20:25.0
书上题目 04-14
要求:输入一串字符,分别统计英文字母,数字,空格和其他字符的个数。(最好用DO-WHILE结构)
这是我写的代码:
import java.io.*;

public class Count {
  public static void main(String[] args) throws IOException{
  (new CountChar()).count();
  }
}
class CountChar {
public void count() throws IOException{
char ch;
int m=0;
int n=0;
int o=0;
int p=0;
System.out.println("please input string");
do
{
ch=(char)System.in.read();
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'){
m+=1;}
else if(ch>='0'&&ch<='9'){
n+=1;}
else if(ch==' '){
o+=1;}
else {
p+=1;}

}while(ch!='\n');
System.out.println("英语字母有"+m+"个");
System.out.println("数字有"+n+"个");
System.out.println("空格有"+o+"个");
System.out.println("其他字符有"+p+"个");


}
}
问题:统计其他字符的个数总是不对,如何判断是不是特殊字符呢?
请各位指点!有更好的代码页可以贴出来!

------解决方案--------------------
Java code
public class Count {    public static void main(String[] args) throws IOException {        (new CountChar()).count();    }}class CountChar {    public void count() throws IOException {        char ch;        int m = 0;        int n = 0;        int o = 0;        int p = 0;        Map<String,HashSet<Character>> map = new HashMap<String,HashSet<Character>>();        System.out.println("please input string");        do {            ch = (char) System.in.read();            if(ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z'){                if(map.containsKey("英文字母")){                    map.get("英文字母").add(ch);                }                else{                    HashSet<Character> chs = new HashSet<Character>();                    chs.add(ch);                    map.put("英文字母", chs);                }                m++;                            } else if (ch >= '0' && ch <= '9'){                if(map.containsKey("数字")){                    map.get("数字").add(ch);                }                else{                    HashSet<Character> chs = new HashSet<Character>();                    chs.add(ch);                    map.put("数字", chs);                }                n += 1;            } else if (ch == ' ') {                if(map.containsKey("其他字符")){                    map.get("其他字符").add(ch);                }                else{                    HashSet<Character> chs = new HashSet<Character>();                    chs.add(ch);                    map.put("其他字符", chs);                }                o += 1;            }else{                if(map.containsKey("其他字符")){                    map.get("其他字符").add(ch);                }                else{                    HashSet<Character> chs = new HashSet<Character>();                    chs.add(ch);                    map.put("其他字符", chs);                }                System.out.println(ch=='\r'||ch=='\n');//你这里的其他字符就是这两个字符。没有统计错吧                p += 1;            }        } while (ch != '\n');        System.out.println("英语字母有" + m + "个");        System.out.println("数字有" + n + "个");        System.out.println("空格有" + o + "个");        System.out.println("其他字符有" + p + "个");        System.out.println(map);    }}
  相关解决方案