字符串查找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;
}
字符串查找String.IndexOf的更多相关文章
- c# String.IndexOf 方法 string查找字符串
c# String.IndexOf 方法 (value, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. ...
- 字符串中判断存在的几种模式和效率(string.contains、string.IndexOf、Regex.Match)
通常情况下,我们判断一个字符串中是否存在某值常常会用string.contains,其实判断一个字符串中存在某值的方法有很多种,最常用的就是前述所说的string.contains,相对来说比较常用的 ...
- 判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比
我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,. var str=",1,2,3,33,22,123,"; 一般有几种方式: 1 ...
- 重写java.lang.String IndexOf()方法,实现对字符串以ASCII规则截取
/** * 根据元数据和目标ascii位数截取字符串,失败返回-1 * @param sourceStr 元数据字符串 * @param endIndex 截取到第几位 * @return 结果字符串 ...
- String.IndexOf String.IndexOf String.Substring
String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. ...
- JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象 String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". ...
- JavaScript 字符串(String)对象
String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...
- 【C#】判断字符串中是否包含指定字符串,contains与indexof方法效率问题
#方法一:使用string.Contains方法 string.Contains是大小写敏感的,如果要用该方法来判断一个string是否包含某个关键字keyword,需要把这个string和这个key ...
- Java基础-字符串(String)常用方法
Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Pr ...
随机推荐
- android源码环境下用mmm/mm编译模块,输出编译log到文件的方法
android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...
- 【转】当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/panx ...
- 通过Guid获取DirectoryEntry对象
绑定DirectoryEntry对象通常有两种方法,一种是通过字符串(如通过ADsPath),一种是通过Guid(参见:http://msdn.microsoft.com/zh-cn/library/ ...
- 19. UIAlertController 提示框获取文本内容,打印控制台上
1.首先定义一个全局字符串变量,方便接收获取的文本内容 2. -(void)viewDidAppear:(BOOL)animated{ UIAlertController * alert = [UIA ...
- floyd算法小结
floyd算法是被大家熟知的最短路算法之一,利用动态规划的思想,f[i][j]记录i到j之间的最短距离,时间复杂度为O(n^3),虽然时间复杂度较高,但是由于可以处理其他相似的问题,有着广泛的应用,这 ...
- webpack入门指南(转载)
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...
- zmq中zmq_poll()函数介绍
功能: 查看指定的多个socket上哪些socket发生了指定的事件, 事件有: ZMQ_POLLIN: 有消息到来 ZMQ_POLLOUT: 当前无阻塞可以发送消息 ZMQ_POLLERR: 只对标 ...
- 学习django之正则表达式的语法
正则表达式 正则表达式的常用语法: 1)单个字符: . 任意的一个字符 a|b 字符a或字符b [afg] a或者f或者g的一个字符 [0-4] 0 ...
- 基于VC的ACM音频编程接口压缩Wave音频(一)
(一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...
- MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC (转)
一.问题描述 我所使用的编程环境:VS2010 出现的问题如下: MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号_WinMain@16,该符号在函数 _ ...