最近在解决android 中listview的查找问题,用到了indexOf 方法,仔细看了下源码,详解如下。

    private static int indexOf(String source, String target, int fromIndex) {final int sourceLength = source.length();final int targetLength = target.length();//1、当开始查找位置 大于等于 源字符串长度时,如果[查找字符串]为空,则://返回字符串的长度,否则返回-1.if (fromIndex >= sourceLength) {return (targetLength == 0 ? sourceLength : -1);}//2、如果fromIndex 小于 0,则从 0开始查找。if (fromIndex < 0) {fromIndex = 0;}//3、如果[查找字符串]为空,则返回fromIndexif (targetLength == 0) {return fromIndex;}//4、开始查找,从[查找字符串]中得到第一个字符,标记为firstchar first = target.charAt(0);//4.1、计算出源字符串最大开始查找的位置int max = (sourceLength - targetLength);//4.2、遍历查找for (int i = fromIndex; i <= max; i++) {/* Look for first character. *///4.2.1、从[源字符串]中,查找到目标字符串每个字母的 first 的位置,找不到直接返回-1结束if (source.charAt(i)!= first) {while (++i <= max && source.charAt(i) != first);}/* Found first character, now look at the rest of v2 *///4.2.2、如果在[源字符串]中,找到首个[目标字符串],则开始匹配整个[目标字符串]if (i <= max) {//4.2.2.1、得到下一个要匹配的位置,标记为jint j = i + 1;//4.2.2.2、得到其余[目标字符串]的长度,标记为end,当j=end时表示目标字符串匹配完成int end = j + targetLength - 1;//4.2.2.3、遍历,其余[目标字符串],从k开始,//如果j不越界(小于end,表示:其余[目标字符串]的范围),//同时[源字符串]==[目标字符串],则//自增,继续查找匹配。直至完成所有匹配for (int k = 1; j < end && source.charAt(j)== target.charAt(k); j++, k++);//4.2.2.4、如果j与end相等,则表示://源字符串中匹配到目标字符串,匹配结束,返回i。if (j == end) {/* Found whole string. */return i;}}}//其余情况,返回-1.表示没有匹配到目标字符串return -1;}

一、indexOf函数简介
indexOf是String.java中的一个方法,用于返回[目标字符串]在[源字符串]中的位置。

1、indexOf:返回特定子字符串第一次在源字符串中的位置。如果源字符中不存在目标字符,则返回-1。

二、indexOf函数两种用法和实现功能说明

1、 indexOf(String str): 返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。
2、indexOf(String str, int index): 返回从 index 位置开始查找指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。

举例说明:

String str = "01234567890123456789";
System.out.println(str.indexOf("123"));
System.out.println(str.indexOf("123",5));

上面程序的结果为1和11。第1个输出函数中的indexOf()方法只有一个参数,故返回123在str中第一次出现处的索引,为1;第1个输出函数中的indexOf()方法有两个参数,第一个参数为要查找的字符串123,第2个参数为从第5所以位置处开始查找,故只能查找到str中的第2个123,返回其出现的起始索引,为11。

java 中indexOf函数详解相关推荐

  1. Java中Math函数详解

    Java中Math函数的使用 算术计算 Math.sqrt() :计算平方根 Math.cbrt() : 计算立方根 Math.pow(a, b) : 计算a的b次方 Math.max( , ) : ...

  2. Java中JDBC连接数据库详解

    今天动力节点java学院小编分享的是JDBC连接数据库的相关知识,希望通过看过此文,各位小伙伴对DBC连接数据库有所了解,下面就跟随小编一起来看看JDBC连接数据库的知识吧. 一.JDBC连接数据库概 ...

  3. Matlab中 pdist 函数详解

    学习笔记,仅供参考,有错必纠 转载自:Matlab中 pdist 函数详解(各种距离的生成); pdist Pairwise distance between pairs of objects. Sy ...

  4. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  5. JAVA中的Random详解

    JAVA中的Random详解 首先,在JDK自带的常用的random中有两个,这俩都是产生随机数的,不过一个是util下的random,另外一个是Math下的.我们分别介绍一下 util中的rando ...

  6. java中new关键字详解

    java中new关键字详解 在java中我们可以经常使用new来创建一个对象,但是这对于初学者来说可能只会使用却不能理解new关键字和它的语法 new关键字的语法 注意使用前先导包,一般我们使用ide ...

  7. matlab中xcorr函数详解

    Matlab中xcorr函数详解 引言 在matlab中查找相关函数时,找到了xcov函数和xcorr函数,仔细看了帮助文档,发现虽然计算公式不一样,但是两个函数用法相同,计算出的值也相同,于是在翻了 ...

  8. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  9. Java中super关键字详解

    Java中super关键字详解 super有什么用? super什么时候不可以省略呢? super在内存图中是如何存在的呢? super使用时的注意事项 super有什么用? (1)当子类中构造方法第 ...

最新文章

  1. iOS-设计模式-观察者模式-KVO
  2. Hive 窗口分析函数
  3. C语言 | 基于51单片机实现MPU6050的卡尔曼滤波算法(代码类1)
  4. php项目从本地apache移到linux的nginx上,遇到的一些访问权限和报错的问题。
  5. 马云启动“NASA”计划 为未来20年愿景研发核心科技
  6. python高性能写法_py 高性能低级,高级写法思考
  7. Unity大中华区总经理兼全球副总裁张俊波:5G的来临,游戏运行于云端变得可能
  8. Java==与equals方法的区别
  9. 无线视频服务器家里好用吗,短视频APP为什么选择国内大带宽服务器?国内服务器有什么优势...
  10. 代码之美~Func让构造方法为属性赋值更灵活
  11. 视频教程-HTML零基础经典入门视频-HTML5/CSS
  12. YApi接口平台-接口挡板
  13. ssm毕设项目基于远程协作的汽车故障诊断系统t6ipg(java+VUE+Mybatis+Maven+Mysql+sprnig)
  14. SSM框架实现数据库存储图片及读取图片
  15. 服务器开机grub gt 命令修复方法,开机grubgt命令修复方法
  16. 蓝桥杯成绩公布啦,国赛将至?大一省一选手带你冲刺国赛
  17. 过压保护芯片—— QX3001 可以替代 lp78070f FM5001
  18. R语言入门教程知识 第二章 赋值代码与命名规则
  19. proteus仿真——四路抢答器
  20. 【ARM】ARM处理器概述

热门文章

  1. 2018ICPC区域赛徐州站赛后总结(The 2018 ACM-ICPC Asia Xuzhou Regional Contest)
  2. 新闻联播鸿蒙系统,重磅!华为鸿蒙系统问世
  3. Windows动态库注册和取消注册
  4. @Autowired 和 @Resource 的 5 点区别!
  5. 为什么输入法显示中文打不出中文_打不出中文怎么办?打不出中文解决方法
  6. 吉安稻谷飘香 国稻种芯·中国水稻节:江西主产区农田喝上水
  7. HTML5期末大作业:旅游网站设计——三亚旅游 (6页) HTML+CSS+JavaScript web前端课程设计_web前端课程设计代码,web课程设计-HTML网页制作代码...
  8. 百思不得姐数据刷新数据部分(七)
  9. 芯片封装形式一二三介绍
  10. Golang获取整点的时间戳