java字符串统计字母个数_java8 统计字符串字母个数的几种方法总结(推荐)

1.统计字符串字母个数(并且保持字母顺序)

比如: aabbbbbbbba喔喔bcab cdabc deaaa

目前我做知道的有5种方式噢,如果你还有更好的,欢迎赐教

//方式1

public static void lettercount1(string s) {

s=s.replaceall(" +", "");

//1,转换成字符数组

char c[]=s.tochararray();

map tree=new treemap();

for (int i = 0; i < c.length; i++) {

//第一次:a,1

//第二次:a,2

//2,获取键所对应的值

integer value=tree.get(c[i]);

// 反编译:integer value = (integer)tree.get(character.valueof(c[i]));

//3,存储判断

tree.put(c[i], value==null? 1:value+1);

}

//如果要求结果格式:a(5)b(4)c(3)d(2)e(1)

stringbuilder sbu=new stringbuilder();

for(character key:tree.keyset()){

integer count=tree.get(key);

sbu.append(key).append("(").append(count).append(")");

}

//将sbu转换为字符串

system.out.println(sbu.tostring());

}

//方式2 使用流

//这个在测试特殊字符,比如\ \n时,他的顺序会不对,这个是map造成的

//解决办法使用treemap

public static void lettercount2(string s) {

s=s.replaceall(" +", "");

treemap result = arrays.stream(s.split(""))

.sorted()

// .collect(collectors.groupingby(function.identity(),collectors.counting()));

.collect(collectors.groupingby(function.identity(),treemap::new,collectors.counting()));

system.out.println(result);

}

//方式3 使用collections.frequency

//其实就是字符串变成集合存每个字串,把每个字串循环跟集合比较

public static void lettercount3(string s) {

s=s.replaceall(" +", "");

list list=arrays.aslist(s.split(""));

map map=new treemap();

for (string str : list) {

map.put(str, collections.frequency(list, str));

}

system.out.println(map);

}

//方式4

public static void lettercount4(string s) {

s=s.replaceall(" +", "");

string[] strs = s.split("");

map map=new treemap();

for (string str : strs) {

map.put(str, stringcount(s, str));

}

system.out.println(map);

}

//方式5

public static void lettercount5(string s) {

s=s.replaceall(" +", "");

string[] strs = s.split("");

map map=new treemap();

for (string str : strs) {

map.put(str, stringcount2(s, str));

}

system.out.println(map);

}

//巧用split

public static int stringcount(string maxstr, string substr) {

// 注意

// 1.比如qqqq,没有找到,则直接返回这个字符串

// 2.比如qqqjava,末尾没有其他字符,这时也不会分割,所以可以添加一个空格

// 3.java11开头没有字符,没有关系,自动空填充

// 4.对于特殊字符,要注意使用转义符

int count = (maxstr + " ").split(substr).length - 1;

// system.out.println("\"" + minstr + "\"" + "字符串出现次数:" + count);

return count;

}

//如果要不区分大小写,则compile(minstr,case_insensitive)

public static int stringcount2(string maxstr, string substr) {

int count = 0;

matcher m = pattern.compile(substr).matcher(maxstr);

while (m.find()) {

count++;

}

return count;

}

2.统计字符串的单词个数(只限英文)

这个其实跟上面一样的,下面只写一个简洁的方法

public static void wordstringcount(string s) {

//这里开始是字符串,分割后变成字符串流

map result = arrays.stream(s.split("\\s+"))

.map(word -> word.replaceall("[^a-za-z]", ""))

.collect(collectors.groupingby(function.identity(),collectors.counting()));

system.out.println(result);

}

3.统计文本单词个数(只限英文)

//统计一个文本中单词的个数

public static void wordfilecount(string path) throws ioexception{

//这里一开始字符串流

//先分割

//在变成字符流

//在筛选

map result = files.lines(paths.get(path),charset.defaultcharset())

.parallel()

//字符串流--分割--字符串流

.flatmap(str->arrays.stream(str.split(" +")))

.map(word -> word.replaceall("[^a-za-z]", ""))

//去掉空

.filter(word->word.length()>0)

.collect(collectors.groupingby(function.identity(),collectors.counting()));

system.out.println(result);

}

4.其他不相干的

我们知道,可变参数列表,可以不传参数的

对于

public void testname() {

system.out.println("a");

}

public void testname(string ... s) {

//不传参数,s会默认初始化一个对象

system.out.println("b");

}

此时调用testname() 打印什么呢?,会打印a,会自动匹配参数真正为空的方法

以上这篇java8 统计字符串字母个数的几种方法总结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值