算法练习之从String.indexOf的模拟实现开始
作者:mdxy-dxy 时间:2023-02-23 09:20:40
String.indexOf的模拟实现,没想象中有多么高深的查找算法,就是最普通的遍历查找
思路:先找到第一个相同的字符,然后依次比较后面的字符,若都相等则表示查找成功
/**
* 查找字符串pattern在str中第一次出现的位置
* @param str
* @param pattern
* @return
*/
public int firstIndexOf(String str, String pattern) {
for (int i = 0; i < (str.length() - pattern.length()); i++) {
int j = 0;
while (j < pattern.length()) {
if (str.charAt(i + j) != pattern.charAt(j)) break;
j++;
}
if(j==pattern.length()) return i;
}
return -1;
}
/**
* 查找字符串pattern在str中最后一次出现的位置
* @param str
* @param pattern
* @return
*/
public int lastIndexOf(String str, String pattern) {
for (int i = str.length() - pattern.length(); i >= 0; i--) {
int j = 0;
while (j < pattern.length()) {
if (str.charAt(i + j) != pattern.charAt(j)) break;
j++;
}
if (j == pattern.length()) return i;
}
return -1;
}
/**
* 查找字符串pattern在str中出现的位置
* @param str
* @param pattern
* @return
*/
public List<Integer> indexOf(String str, String pattern) {
List<Integer> indexs = new ArrayList<Integer>();
for (int i = 0; i < (str.length() - pattern.length()); i++) {
int j = 0;
while (j < pattern.length()) {
if (str.charAt(i + j) != pattern.charAt(j)) break;
j++;
}
if (j == pattern.length()) indexs.add(i);
}
return indexs;
}
同样更常用的String.contains方法实际上就是调用的String.indexOf实现
/**
* 判断字符串pattern在str中是否存在
* @param str
* @param pattern
* @return
*/
public boolean contains(String str, String pattern) {
return firstIndexOf(str, pattern) != -1;
}
标签:String.indexOf,算法
0
投稿
猜你喜欢
java实现KFC点餐系统
2021-09-06 11:36:34
Java%(取模运算)全面讲解
2022-03-02 06:11:34
谈谈RxJava2中的异常及处理方法
2023-05-12 09:18:11
java随机验证码生成实现实例代码
2022-05-18 03:03:31
基于java的opencv开发过程详解
2022-03-31 20:02:59
详解Java高级特性之反射
2021-06-09 14:01:06
JAVA集合框架工具类自定义Collections集合方法
2022-01-11 16:24:13
flutter 怎么实现app整体灰色效果
2023-01-24 21:23:22
Android实战教程第六篇之一键锁屏应用问题解决
2023-01-28 03:13:22
java实现队列数据结构代码详解
2023-06-20 15:35:47
浅谈C#与Java两种语言的比较
2023-09-26 13:05:19
jpa EntityManager 复杂查询实例
2023-08-31 01:03:01
android实现文件读写功能
2022-03-10 16:31:23
SpringMVC编程使用Controller接口实现控制器实例代码
2023-02-01 02:03:36
Android编程之绘制文本(FontMetrics)实现方法
2023-01-19 16:06:16
Android控件之Spinner用法实例分析
2022-08-06 08:36:33
Android实现桌面悬浮窗、蒙板效果实例代码
2022-12-15 18:09:42
Java 并发编程之线程挂起、恢复与终止
2022-02-18 11:51:51
datatable去掉重复行的方法
2023-09-02 19:59:41
Java流程控制语句最全汇总(上篇)
2023-11-03 01:57:48