Java中你知道几种从字符串中找指定的字符的数量

boyanx15小时前技术教程2

遇到这样的问题,常规的思路估计就是遍历String,然后逐个对比。下面先看循环遍历

循环遍历

private static int getNum(String originStr, String targetStr){
  int result = 0;
  for (int i = 0; i < originStr.length(); i++) {
    if (targetStr.equals(originStr.substring(i, i + 1))){
      result ++;
    }
  }
  return  result;
}

这样虽然直观,但感觉效率不行。继续研究String中的方法,很快我们想到了indexOf方法,该方法可以获取指定字符串在String对象的位置。

indexOf方法

private static int getNum(String originStr, String targetStr){
  int res = 0;
  int i = originStr.indexOf(targetStr);
  while (i != -1){
    i = originStr.indexOf(targetStr,i+1);
    res++;
  }
  return res;
}

这样的方法看上去,好像不太直观,此时想到split方法,该方法可以根据字符串切分原字符串,似乎可以通过切割后的数组数量达到计算效果

split方法

private static int getNum(String originStr, String targetStr){
  int start = originStr.startsWith(targetStr) ? 1 : 0;
  int end = originStr.endsWith(targetStr) ? 1 : 0;
  String[] split = originStr.split(targetStr);
  return split.length - 1 + start + end;
}

split方法使用需要注意边界问题,如果不注意,容易漏计算。除了这些还有其他方案吗?

replaceAll方法

private static int getNum(String originStr, String targetStr){
  String result = originStr.replaceAll(targetStr, "");
  int i = originStr.length() - result.length();
  return  i;
}

通过replaceAll方法需要注意targetStr中是否有需要转义的字符串。

测试各个方法的效率

将每个方法执行10000次,测得每个方法耗时如下

遍历:10ms
replaceAll:35ms
split:11ms
indexOf:2ms

因此建议使用indexOf,大家还有没有更高级的方法,欢迎留言。

相关文章

python进阶100集(6)深入分析字符串切片

以下是关于Python字符串切片及修改替换的深度解析,包含原理说明和典型操作示例:#python##python自学##python教程#一、字符串切片机制1. 切片基础语法str[start:...

打钱专业户!330穿的八级金币黑枪王

大家好,我是你们的游戏小编:冴之木七星在八级,提起黑枪,大家第一个想到的可能还是莱茵(菜田),但是要说最强黑枪车,我Strv S1第一个不服。毕竟:这是一台只为黑枪而生的黑枪车!极高的隐蔽,超高的穿深...

C++基础——文件逐行读取与字符匹配

C++基础——文件逐行读取与字符匹配目录技术背景C++读取文件C++字符串匹配C++运行时间统计总结概要版权声明技术背景用惯了python,对其他语言就比较的生疏。但是python很多时候在性能上比较...

Go语言字符串拼接性能对比与最佳实践 - 深度优化指南

字符串拼接在日常开发中非常的常见,go 也有多种方式可以进行字符串拼接,但是当数据量足够大的情况下,不同的拼接方式会产生显著的性能差异。本文通过基准测试数据,带您深入理解Go语言字符串操作的底层机制,...

算法系列:实现strStr函数(字符串)

28. 实现 strStr()描述给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则...

必看!Concatenate 函数 , 字符串拼装的 “拼接大师”,快学起来!

在 Excel 的函数大家庭里,Concatenate 函数就像是一位勤劳的 “拼接大师”,专门负责把多个文本字符串合并成一个连贯的文本字符串 。无论是处理姓名、地址,还是组合各种数据信息,它都能轻松...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。