java--------------华为--------------------字符个数统计
题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
输入例子:
abc
输出例子:
3
解法一:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
// 输入字符串
int len = str.length();// 计算字符串长度
int[] count = new int[128]; // new一个int数组,作为某个char是否出现过的标记,
// 如aaa,则count[(int)a]=1;则‘a’出现过
/* *接下来循环遍历String, * 用count数组标记出现过的char, *int一个num作为出现过的总数 */
int num = 0;
for (int i = 0; i < len; i++) {
int numOfChar_ASCII = str.charAt(i);
if (count[numOfChar_ASCII] != 1) {
count[numOfChar_ASCII] = 1;
num++;
}
} // 输出结果
System.out.println(num);
}
}
}
解法二:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
//编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
Map<Integer, Boolean> map = new HashMap<>();
// 定义一个Map直接表示char是否出现过
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);// 逐个获取字符
if (ch >= 0 && ch <= 127) {// 首先字符在0~127的范围内
if (!map.containsKey(ch)) {
// 如果字符不再map中则添加到map中,且将对应的value改为true
map.put((int) ch, true);
}
}
}
System.out.println(map.size());
}
}