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的更多相关文章

  1. c# String.IndexOf 方法 string查找字符串

    c# String.IndexOf 方法 (value, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. ...

  2. 字符串中判断存在的几种模式和效率(string.contains、string.IndexOf、Regex.Match)

    通常情况下,我们判断一个字符串中是否存在某值常常会用string.contains,其实判断一个字符串中存在某值的方法有很多种,最常用的就是前述所说的string.contains,相对来说比较常用的 ...

  3. 判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比

    我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,. var str=",1,2,3,33,22,123,"; 一般有几种方式: 1 ...

  4. 重写java.lang.String IndexOf()方法,实现对字符串以ASCII规则截取

    /** * 根据元数据和目标ascii位数截取字符串,失败返回-1 * @param sourceStr 元数据字符串 * @param endIndex 截取到第几位 * @return 结果字符串 ...

  5. String.IndexOf String.IndexOf String.Substring

    String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. ...

  6. JavaScript 字符串(String) 对象

    JavaScript 字符串(String) 对象 String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". ...

  7. JavaScript 字符串(String)对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...

  8. 【C#】判断字符串中是否包含指定字符串,contains与indexof方法效率问题

    #方法一:使用string.Contains方法 string.Contains是大小写敏感的,如果要用该方法来判断一个string是否包含某个关键字keyword,需要把这个string和这个key ...

  9. Java基础-字符串(String)常用方法

    Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Pr ...

随机推荐

  1. priority_queue 示例

    http://www.cplusplus.com/reference/queue/priority_queue/ priority_queue 的top始终保持着为一堆数据中的最大元素. 读取最小 O ...

  2. openjudge2985(数字组合)

    描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如:n=5,5个数分别为1,2,3,4,5,t=5:那么可能的组合有5=1+4和5=2+3和5=5三种组合方式.输入输入的第一行是两 ...

  3. oracle 小题

    create table student(sno varchar2(10) primary key,sname varchar2(20),sage number(2),ssex varchar2(5) ...

  4. JS 前端格式化JSON字符串工具

    JSON格式化工具,简易实现.作为技术宅,直接上代码,供大家使用.前提:一定要引入jquery哦. <!DOCTYPE html> <html lang="en" ...

  5. 学习ES6--data2

    变量的解构: let [a, b, c] = [1, 2, 3] 等号左边的值等于等号右边的值,一一对应.假如右边没有相对应的值,如 let [a, b, c] = [1, 2, ] 这时候,c = ...

  6. Python成长笔记 - 基础篇 (九)

    创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequ ...

  7. 插入排序-java

    排序-插入排序 基本思想:将待排序表看作左右两部分,其中左边为有序区,右边为无序区, 整个排序过程就是将右边无序区中的元素逐个插入到左边的有序区中,以构成新的有序区. 平均时间:O(n2) 最好情况: ...

  8. js jq 获取网页元素宽度

    Javascript: IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度d ...

  9. bootstrap双日历插件实例化

    网站中难免会用到日期选择插件,常见的有jquery的,也有bootstrap的.单日历的就不说了,实例化都比较简单.今天给大家介绍一下bootstrap的双日历插件. http://www.jq22. ...

  10. HTML5实战1

    第一章 1.搭建环境,wamp 2.检查浏览器是否支持html5 ,是否支持新标签<canvas></canvas> 3.简单高效,少用id,多用标签. 4.使用css3美化样 ...