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

 更新时间:2014年12月25日 14:24:28   投稿:mdxy-dxy  
这篇文章主要介绍了算法练习从String.indexOf的模拟实现开始,需要的朋友可以参考下

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

相关文章

  • C#:(变量)字段和局部变量的作用域冲突

    C#:(变量)字段和局部变量的作用域冲突

    C#:字段和局部变量的作用域冲突,需要的朋友可以参考一下
    2013-02-02
  • 微信开发--企业转账到用户

    微信开发--企业转账到用户

    本文主要介绍了微信开发--企业转账到用户的实现方法与步骤。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Unity UGUI的Outline描边组件的介绍使用示例

    Unity UGUI的Outline描边组件的介绍使用示例

    这篇文章主要介绍了Unity UGUI的Outline描边组件的介绍使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • c#生成缩略图的实现方法

    c#生成缩略图的实现方法

    c#生成缩略图的实现方法,需要的朋友可以参考一下
    2013-04-04
  • C#/VB.NET 给Excel添加、删除数字签名的方法

    C#/VB.NET 给Excel添加、删除数字签名的方法

    这篇文章主要介绍了C#/VB.NET 给Excel添加、删除数字签名的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 使用C#实现自己封装的Modbus工具类库

    使用C#实现自己封装的Modbus工具类库

    Modbus通讯协议在工控行业的应用是很多的,并且也是上位机开发的基本技能之一,所以本文主要为大家介绍了如何使用C#封装一个Modbus工具类库,需要的可以参考下
    2024-02-02
  • C# 如何解析获取Url参数值

    C# 如何解析获取Url参数值

    这篇文章主要介绍了C# 如何解析获取Url参数值,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-08-08
  • C#实现窗口之间的传值

    C#实现窗口之间的传值

    本文给大家介绍的是C#中利用静态类和静态变量来实现窗口间传值的方法和示例,非常的实用,有需要的小伙伴可以参考下。
    2015-06-06
  • C#编程获取资源文件中图片的方法

    C#编程获取资源文件中图片的方法

    这篇文章主要介绍了C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#微信分享代码

    C#微信分享代码

    这篇文章主要为大家详细介绍了C#微信分享的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论