模式匹配(indexOf)
来源:互联网 发布:数控外圆磨床编程案例 编辑:程序博客网 时间:2024/06/06 13:57
简单串模式匹配算法
package com.test;public class Test {/** * 一个普通的模式匹配算法 * @param str 主串 * @param sub 模式串 * @param pos 位置 * @return 模式串的匹配的首个开始位置 */public static int indexOf1(String str, String sub, int pos){int i = pos;int j= 0;while(i < str.length() && j < sub.length()){if(str.charAt(i) == sub.charAt(j)){++i;++j;}else{i = i - j + 1;// j刚好可以记录i先前走了几步,利用j可以回溯指针i。j= 0;}}if(j == sub.length()){// 匹配的话,j刚好=sub最后下标+1(sub长度)return i - sub.length();}return -1;}/** * /java indexOf源码算法,进行了命名改动和变量简化 * 一个普通的模式匹配算法 * @param str 主串 * @param sub 模式串 * @param pos 位置 * @return 模式串的匹配的首个开始位置 */public static int indexOf2(String str, String sub, int pos){int strLen = str.length();int subLen = sub.length();//两个边界处理if (pos >= strLen) { return (subLen == 0 ? strLen : -1);} if (pos < 0) { pos = 0; } //特殊值处理 if (subLen == 0) { return pos; } char first = sub.charAt(0);//模式串第一个字符 int max = strLen - subLen;//母串不必匹配到最后一个字符 for (int i = pos; i <= max; i++) { /* 查找第一个字符 */ if (str.charAt(i) != first) { while (++i <= max && str.charAt(i) != first); } /* 找到第一个字符,现在找模式串的第二个字符 */ if (i <= max) { int j = i + 1; int end = j + subLen - 1; for (int k = 1; j < end && str.charAt(j) == sub.charAt(k); j++, k++); if (j == end) { /* 找到了整个串 */ return i; } } } return -1;}public static void main(String[] args) {System.out.println(indexOf1("ababbabacc", "bb", 0));System.out.println(indexOf2("ababbabacc", "bb", 0));}}
。
阅读全文
0 0
- 模式匹配(indexOf)
- 字符串匹配函数IndexOf
- 使用indexOf匹配字符串
- QStringList的indexOf匹配
- 使用indexOf匹配字符串
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)
- JAVA中字符串匹配indexof()的用法
- 模式匹配(KMP)
- java的indexOf(String.indexOf 方法)
- java的indexOf(String.indexOf 方法)
- indexOf(String.indexOf 方法)0
- python使用cx_Oracle操作oracle示例
- opencv人脸识别,瞳孔检测
- 【wyy】PC端支付宝支付-java
- Trie字典树、数字查找、键树
- 数据库的原理
- 模式匹配(indexOf)
- spark源码系列文章------shuffle模块详解
- 模式匹配 KMP
- 极光推送Cordova插件—AndroidStudio运行Demo
- python---进程与线程(四)---process类,进程间通信,进程池,协程
- 栈实现进制转换
- 栈实现HTML和UBB的转换
- 字节流转换字符流简单工具类
- 笔记本如何同时上内外网