怎么统计字符串中a、b、c三个字符的个数 100
public class Test {
public static void main(String args[]) {
String upper = JOptionPane.showInputDialog(null, "输入文本");
System.out.println(upperStrToLowerStr(upper));
}
public static String upperStrToLowerStr(String upper) {
String lower = "";
for (int i = 0; i < upper.length(); i++) {
lower += upperCaseToLowerCase(upper.charAt(i));
}
return lower;
}
public static char upperCaseToLowerCase(char ch) {
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (ch +32); } //将大写字母转换成小写字母
else
if (ch >= 'a' && ch <= 'z') {
ch = (char) (ch -32); } //将小写字母转换成大写字母
return ch;
}
public static int test(String src, String ch) {
return (src.length() - src.replace(ch, "").length()) / ch.length();
}
} 展开
推荐用java8的stream来进行有关集合数据统计问题
由题意得到的
输入:一个字符串str
输出:统计这个字符串按str中a,b,c出现的次数
但是这里并没有说区分大小写,所以代码里做了一下控制
参考代码如下(请用java8环境运行):
public static void main(String[] args) {
String s = "asdf12fdfdsaAcAaascdbashcdas";
Boolean isIgnoreCase = false;
Map<String, Long> map = countNum(s, isIgnoreCase);
System.out.println(map);
}
public static Map<String, Long> countNum(String str, Boolean isIgnoreCase) {
Map<String, Long> map = Pattern.compile("").splitAsStream(str)
.map(item -> isIgnoreCase ? item.toLowerCase() : item)
.collect(Collectors.groupingBy(item -> item, Collectors.counting()));
return map;
}
解释一下:
s字符串就是要解析的字符串
isIgnoreCase 就是是否要忽略大小写,false的话表示不忽略,那A和a就算分别统计算一次,true的话,表示要忽略,那A和a就应该算两次
Pattern.compile("").splitAsStream(str): 把字符串str按照空字符串分割,其实就是把字符串中每个字符取出来组合成一个stream
map(item -> isIgnoreCase ? item.toLowerCase() : item):把其中每个字符映射,映射规则是要进行判断若isIgnoreCase为true,即忽略大小写,那字符都转化为小写,若不忽略,则用原来的字符即可
collect(Collectors.groupingBy(item -> item, Collectors.counting())):转化后,按照各自出现的字符进行统计,统计其中的次数
运行后最后把map打印一下就非常清楚了
isIgnoreCase 为false,不区分大小写
isIgnoreCase 为true,区分大小写,此时统计结果中无A的统计
最后直接再map中get("a")或者get("b"),把统计结果取出来即可
广告 您可能关注的内容 |