网站首页 > java教程 正文
遇到这样的问题,常规的思路估计就是遍历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,大家还有没有更高级的方法,欢迎留言。
- 上一篇: 剑指Offer(五十四):字符流中第一个不重复的字符(Java版)
- 下一篇: Java字符串比较方法
猜你喜欢
- 2024-11-24 Java基础刷题,一篇入门
- 2024-11-24 LeetCode题解|1047.删除字符串中的所有相邻重复项
- 2024-11-24 java集合框架-Collection与List集合
- 2024-11-24 悟空云课堂 | 第三期:路径遍历漏洞的防范与检测
- 2024-11-24 LeetCode-043-字符串相乘
- 2024-11-24 Java面试:给你15到20分钟,你把这道编程题写下
- 2024-11-24 一个简单的字符串,为什么 Redis 要设计的如此特别
- 2024-11-24 Go&Java算法之至少有K个重复字符的最长子串
- 2024-11-24 2021-06-25:只由小写字母(a~z)组成的一批字符串,都放在字符
- 2024-11-24 剑指offer(二十七)-字符串的排列(Java版)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)