Python、Java与JavaScript实现indexOf算法原理详解

不晚
不晚
发布时间:2026-10-14| 4人浏览过
原创

本文深入解析indexOf函数的核心原理,即通过遍历原始字符串并逐字符比对来定位子串下标。文章分别使用Java、JavaScript和Python三种语言实现了该算法,展示了从字符计数到索引返回的完整逻辑,适用于前后端开发场景下的字符串处理需求。

简介

简介

在近期的项目开发中,无论是前端还是后端代码,indexOf的使用频率都极高。本文将深入探讨其背后的实现原理。

indexOf的功能是:在一个字符串中查找另一个子串首次出现的位置。若找到,返回对应的下标;若未找到,则返回-1。其核心逻辑并不复杂,下面我们将探讨如何手动实现这一功能。

原理

原理

假设匹配字符串A为“叫练”,原始字符串B为“边叫边练,我喜欢叫练”。直观上看,“叫练”位于B的末尾。算法执行时,以B为循环主体,逐个字符进行比对。首先查找字符“叫”,一旦匹配成功,计数器加1;接着继续查找下一个字符“练”。若后续字符不是“练”,则计数器清零,并从B的起始位置重新尝试查找“叫”。当在B的倒数第二个字符处再次匹配到“叫”,计数器加1后,紧接着匹配到“练”,此时计数器达到2,恰好等于字符串A的长度,表明匹配成功。整个查找过程即基于这种逐字符比对与计数器重置的机制。接下来,我们将分别使用Java、JavaScript和Python语言来实现这一逻辑。

注意:以下代码未包含边界校验,仅供原理参考。Python中对应的index方法实现原理相同,但区别在于若未找到匹配项,Python会直接抛出异常而非返回-1。

代码实现

实现

Java实现

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实现

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实现

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

以上即为使用Python、Java和JavaScript实现indexOf算法的详细内容。如需了解更多关于indexOf的资料,请继续关注本站其他相关文章。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。