字符串查找
2016-07-08 18:27
381 查看
字符串查找
Java中在字符串中查找子串的方法有以下几种
1. 利用方法 indexof()
indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
indexOf(String str,
int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。将最右边的空字符串 “” 视为出现在索引值 this.length() 处。
lastIndexOf(String str,
int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索.
2. 利用split()方法分割字符串,查找子串,并且指出子串位置。
split(String regex,
int limit)
根据匹配给定的正则表达式来拆分此字符串。
此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
将字符串发给之后,遍历各个数组,将存储需要查找指定字符串之前的数组长度相加,就是需要查找子串的位置。
区分:
Split()方法的参数是正则的,而indexof()方法的参数是字符串。
Indexof()方法接收的参数是字符串,在用这个函数时,只需要考虑,它在字符串里面是否是特殊字符,不是得话,直接用双引号引用就行。
如果在split()方法里的话,除了要考虑是否为字符串,还要考虑在正则里面是否是特殊字符串。
Java中在字符串中查找子串的方法有以下几种
1. 利用方法 indexof()
indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
indexOf(String str,
int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。将最右边的空字符串 “” 视为出现在索引值 this.length() 处。
lastIndexOf(String str,
int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索.
2. 利用split()方法分割字符串,查找子串,并且指出子串位置。
split(String regex,
int limit)
根据匹配给定的正则表达式来拆分此字符串。
此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
将字符串发给之后,遍历各个数组,将存储需要查找指定字符串之前的数组长度相加,就是需要查找子串的位置。
public class TextSearch { public static void main(String[] args) { System.out.println("请输入字符串:"); Scanner Sca =new Scanner(System.in); String str=Sca.next(); System.out.println(str); System.out.println("请输入要查找的字符:"); String str2=Sca.next(); StringSearch search=new StringSearch(); System.out.println("位置是:"+getIndex(str, str2, 1)); } public static int getIndex(String str, String c, int times) { int index = 0; String[] arr = str.split(c); int length = arr.length > times ? times : arr.length; for (int i = 0; i < length; i++) { index += arr[i].length(); } return index + times - 1; } }
区分:
Split()方法的参数是正则的,而indexof()方法的参数是字符串。
Indexof()方法接收的参数是字符串,在用这个函数时,只需要考虑,它在字符串里面是否是特殊字符,不是得话,直接用双引号引用就行。
如果在split()方法里的话,除了要考虑是否为字符串,还要考虑在正则里面是否是特殊字符串。
相关文章推荐
- Qt irrlicht(鬼火)3D引擎 摄像机旋转问题
- 【Java笔记】Java——远程监控、反射、代理、内省机制
- 【ElasticSearch系列】Marvel插件
- ubuntu16.04配置Lamp环境(搭建linux+apache+mysql+php7环境
- 7月8日实习日志
- Android中杀进程的几种方法 (1) - killBackgroundProcesses
- C++深拷贝与浅拷贝
- 错误Name node is in safe mode的解决方法
- imx6 android开机启动守护进程
- shell学习网址
- 数据库查询一条语句就需要很长的时间
- 理解 boost::shared_ptr 中所谓的循环引用是如何形成的
- LAMP
- ACM—课程总结
- JS问题解决(一)
- 下面所述步骤中,不是创建进程所必须的步骤是?----阿里巴巴2015实习生笔试题
- CSP考试 2014年12月第4题 最优灌溉 C语言实现
- android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
- android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
- android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $