字符串查找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

时间: 2024-08-29 00:03:51

字符串查找String.IndexOf的相关文章

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

c# String.IndexOf 方法 (value, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. 参数 value 要查找的 Unicode 字符. 对 value 的搜索区分大小写. startIndex(Int32) 可选项,搜索起始位置.不设置则从0开始. count(Int32) 可选项,要检查的字符位数. 返回值 如果找到该字符,则为 value 的索引位置:否则如果未找到,则为 -1

java替换字符串和用indexof查找字符

java自带替换 String s="hlz_and_hourui哈哈"; String new_S=s.replaceAll("哈", "笑毛"); System.out.println(new_S); 则输出为:"hlz_and_hourui笑毛笑毛"; 1 package find_repalce_keywords; 2 3 import java.io.BufferedReader; 4 import java.io.

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

通常情况下,我们判断一个字符串中是否存在某值常常会用string.contains,其实判断一个字符串中存在某值的方法有很多种,最常用的就是前述所说的string.contains,相对来说比较常用的还有string.IndexOf和Regex.Match.直接上代码,后面在说些什么吧,通常情况下功能的实现最重要,作者的话,只对有心者有效. using System; using System.Collections.Generic; using System.Linq; using Syste

JavaScript 字符串(String) 对象

JavaScript 字符串(String) 对象 String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var carname="Volvo XC60";var carname='Volvo XC60'; 你使用位置(索引)可以访问字符串中任何的字符: 实例 var character=carname[7]; 字符串的索引从零开始, 所以字符串第一

indexOf(String.indexOf 方法)

indexOf(String.indexOf 方法) 字符串的IndexOf()方法搜索在该字符串上是否出现了作为參数传递的字符串,假设找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)假设说没有找到则返回 -1 返回 String 对象内第一次出现子字符串的字符位置. [code=csharp]public indexOf(value:String, [startIndex:Number]) : Number[/code] 搜索字符串,并返回在调用字符串内 sta

四:Java之字符串操作String、StringBuffer和StringBuilder

string是我们经经常使用到的一个类型,事实上有时候认为敲代码就是在重复的操作字符串,这是C的特点,在java中.jdk非常好的封装了关于字符串的操作.三个类String .StringBuffer . StringBuilder .这三个类基本上满足了我们在不同情景下使用字符串的需求. 一.String JDK的解释是 "Strings are constant; their valuescannot be changed after they are created"也就是说St

String.IndexOf String.IndexOf String.Substring

String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置.String.IndexOf(value, startIndex, count) 参数value:要查找的 Unicode 字符. startIndex:搜索起始位置. count:要检查的字符位置数.返回值(Int32):如果找到该字符,则为 value 的索引位置:否则如果未找到,则为 -1.

字符串(String、StringBuffer、StringBuilder)

一.String 首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象.查看源码就会发现String类为final型的(当然也不可被继承),而且通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象. 字符串为对象,那么在初始化之前,它的值为null,到这里就有必要提下"".null.new String()三者的区别.null 表示string还没有new ,也就是说对象的引用还没有创建,也没有分配内存空间

java中String.indexOf()用法

查找指定字符或字符串在字符串中第一次出现地方的索引,未找到的情况返回 -1. 例如 String.indexOf(String str) String str1="012345"; String str2="23"; System.out.println( str1.indexOf(str2) ); 输出结果:2. 重载方法有 String.indexOf(String str,int index) 从index的地方开始找,返回第一次出现的索引 String st