ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

indexOf原理,Java,javascript,python实现

2020-09-08 22:51:12  阅读:253  来源: 互联网

标签:叫练 index Java indexOf javascript serachString 字符串 匹配 orgin



简介


最近做项目的时候,发现无论是前端还是后端,indexOf出现的概率都非常频繁,今天我们来看下他的实现原理吧!

indexOf的含义:给定一个字符串去匹配另一个字符串的下标,如果匹配到,返回下标,如果匹配不到则返回-1,其实原理还是比较简单的,如果需要你实现,那么应该怎么做呢?


原理


现在给定匹配的字符串A,原始字符串B,比如匹配字符串A等于“叫练”原始字符串B等于“边叫边练,我喜欢叫练”,你可能一眼就发现“叫练”是最后两个字符,我们以B做循环,一个一个单词去匹配,先找“叫”,找到计数器加1,然后继续找“练”,发现下个字符不是“练”,计数器清零,重新从“叫”开始查找,现在查找到B的倒数第二个字符了,下个字符是“练”计算器再加1,此时计数器等于2也正好是A字符串的长度,说明找到了,查找原理就是这样一个过程;下面我们分别以Java,javascript,python方式实现下。

注意:下面代码没有校验,仅供参考,python是index方法,实现原理一样,但找不到会报错!


实现


Java实现

public static void main(String[] args) {
        String orgin = "边叫边练,我喜欢叫练";
        String serach = "叫练";
        int index = indexOf(orgin,serach);
        System.out.println(index);
    }

/**
     *  indexOf 算法原理
     * @param orgin 原始字符串 B = “边叫边练,我喜欢叫练”;
     * @param serachString 匹配字符串 A=“叫练”
     * @return int 下标
     */
public static int indexOf(String orgin,String serachString) {
    char[] chars = orgin.toCharArray();
    char[] sChars = serachString.toCharArray();
    //返回字符串下标
    int index = -1;
    //匹配字符串计数器,用于查询是否匹配到完整字符串
    int s_index = 0;
    //全局计数器,用于计算下标
    int move = 0;
    for (int i=0; i<chars.length; i++) {
        move++;
        //如果匹配到“叫”,继续向下开始匹配“练”
        if (chars[i] == sChars[s_index]) {
            s_index++;
            if(s_index == sChars.length) {
                index = move-sChars.length;
                break;
            }
        } else {
            s_index = 0;
        }
    }
    return index;
}


Javascript实现

/**
     * @param orgin 原始字符串 B = “边叫边练,我喜欢叫练”;
     * @param serachString 匹配字符串 A=“叫练”
     **/
    function indexOf(orgin,serachString) {
        //返回字符串下标
        var index = -1;
        //匹配字符串计数器,用于查询是否匹配到完整字符串
        var s_index = 0;
        //全局计数器,用于计算下标
        var move = 0;
        for (var i=0; i<orgin.length; i++) {
            move++;
            //如果匹配到“叫”,继续向下开始匹配“练”
            if (orgin.substr(i,1) == serachString.substr(s_index,1)) {
                s_index++;
                if(s_index == serachString.length) {
                    index = move-serachString.length;
                    break;
                }
            } else {
                s_index = 0;
            }
        }
        return index;
    }


python实现

# indexOf 算法原理
# @param orgin 原始字符串 B = “边叫边练,我喜欢叫练”;
# @param serachString 匹配字符串 A=“叫练”
# @return int 下标
def index(orgin, serachString):
    # 返回字符串下标
    index = -1
    # 匹配字符串计数器,用于查询是否匹配到完整字符串
    s_index = 0
    # 全局计数器,用于计算下标
    move = 0
    for letter in enumerate(orgin):
        move = move + 1
        # 如果匹配到“叫”,继续向下开始匹配“练”
        if letter[1] == serachString[s_index]:
            s_index = s_index + 1
            if s_index == len(serachString):
                index = move - len(serachString)
                break
        else:
            s_index = 0;

    return index


标签:叫练,index,Java,indexOf,javascript,serachString,字符串,匹配,orgin
来源: https://blog.51cto.com/14883474/2530364

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有