描述
题目描述
输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数。
本题包含多组输入。
示例
输入:
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
输出:
26
3
10
12
知识点:字符串,正则表达式
难度:⭐⭐⭐
题解
方法一:字符匹配
解题思路:
借助ASCII码进行字符匹配
算法流程:
- 四个变量分别代表字母数、空格数、数字数、其他字符数
- 遍历判断每个字符进行计数
- 原理是借助ASCII码进行字符匹配
Java 版本代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String str = scanner.nextLine();
solution(str);
}
}
private static void solution(String str) {
// 分别代表字母数、空格数、数字数、其他字符数
int letterSum = 0;
int blankSum = 0;
int numberSum = 0;
int otherSum = 0;
// 遍历判断每个字符进行计数
for(char c : str.toCharArray()) {
if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
letterSum++;
} else if(c == ' ') {
blankSum++;
} else if(c >= '0' && c <= '9') {
numberSum++;
} else {
otherSum++;
}
}
System.out.println(letterSum + "\n" + blankSum + "\n" + numberSum + "\n" + otherSum);
}
}
复杂度分析:
时间复杂度:,需要遍历每个字符
空间复杂度:,只用到四个变量用来计数
方法二:正则表达式
解题思路:
利用正则表达式对每个子串进行判断计数
算法流程:
- 四个变量分别代表字母数、空格数、数字数、其他字符数
- 遍历判断每个字符进行计数
- 利用正则表达式语法,
[A-Za-z]
匹配字母,[0-9]
匹配数字
Java 版本代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String str = scanner.nextLine();
solution(str);
}
}
private static void solution(String str) {
// 分别代表字母数、空格数、数字数、其他字符数
int letterSum = 0;
int blankSum = 0;
int numberSum = 0;
int otherSum = 0;
// 遍历判断每个字符进行计数
for(char c : str.toCharArray()) {
String s = String.valueOf(c);
if(s.matches("[A-Za-z]")) {
letterSum++;
} else if(s.equals(" ")) {
blankSum++;
} else if(s.matches("[0-9]")) {
numberSum++;
} else {
otherSum++;
}
}
System.out.println(letterSum + "\n" + blankSum + "\n" + numberSum + "\n" + otherSum);
}
}
复杂度分析:
时间复杂度:,需要遍历每个字符
空间复杂度:,只用到四个变量用来计数