信息发布→ 登录 注册 退出

算法练习之从String.indexOf的模拟实现开始

发布时间:2026-01-11

点击量:

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; 
  } 

标签:# param  # indexs  # gt  # List  # Integer  # class  # brush  # pre  # String  # indexOf  # return  # String.indexOf  # str  # csharp  # pattern  # 先找  # 是否存在  # 到第  # 没想  # 中有  # 遍历  # 算法  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!