算法练习之从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
  • asp之家 软件编程 m.aspxhome.com