题目如下:
输入一行字符,统计字母、空格、数字 与 其它字符的个数
先来了解一些概念:
ASC II(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统;
计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0;
0~31及127(共33个) | 是控制字符或通信专用字符(其余为可显示字符)如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。 |
32~126(共95个) | 是字符(Char),其中: 32为空格, 48~57为0~9十个阿拉伯数字, 65~90为26个大写英文字母, 97~122为26个小写英文字母, |
更多十进制对应结果可以查看Unicode表>>https://www.ssec.wisc.edu/~tomw/java/unicode.html#x0100
好了通过ASC II编码表可以很容易区分 字母、空格、数字、其它字符
代码如下:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String x = s.nextLine();
List<String> l = getNum(x);
for(String i : l){
System.out.println(i);
}
}
static List<String> getNum(String x){
int num=0,letter=0,space=0,other=0;
List<String> l = new ArrayList<String>();
char arr[] = x.toCharArray();
for(char c : arr){
//数字
if(c >= 48 && c <= 57){
num++;
}
//大写字母 ||小写字母
else if(c >= 65 && c <= 90 || c >= 97 && c <= 122){
letter++;
}
//空格
else if(c == 32){
space++;
}
//其它
else other++;
}
l.add("数字个数:"+num);
l.add("字母个数:"+letter);
l.add("空格个数:"+space);
l.add("其它字符:"+other);
return l;
}
示例: