java模式匹配之蛮力匹配

   这篇文章主要介绍了java模式匹配之蛮力匹配的相关资料和代码,需要的朋友可以参考下

  java模式匹配之蛮力匹配

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

/**
* 模式匹配之蛮力匹配
*/
package javay.util;
 
/**
* Pattern Match Brute-Force
* @author DBJ
*/
public class PMBF {
 
/**
* Pattern Match Brute-Force
* @param target 目标串
* @param pattern 模式串
* @return 模式串在目标串中第一次出现的位置
*/
public static int patternMatch(String target, String pattern) {
int targetLength = target.length();
int patternLength = pattern.length();
int idxTgt = 0; // 目标串中字符的位置
int idxPtn = 0; // 模式串中字符的位置
 
int index = 0; // 保存与模式串匹配ing的起始字符的位置
while(idxTgt < targetLength && idxPtn < patternLength) {
//找到一个匹配的字符
if(target.charAt(idxTgt) == pattern.charAt(idxPtn)) {
// 如果相等,则继续对字符进行后续的比较
idxTgt ++;
idxPtn ++;
} else {
// 否则目标串从第二个字符开始与模式串的第一个字符重新比较
index ++;
idxPtn = 0;
idxTgt = index;
}
}
// 匹配到一个,输出结果
if(idxPtn == patternLength) {
//说明匹配成功
return index;
} else {
return -1;
}
}
}

  使用示例:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

static int indexOf(char[] source,char[] target) {
char first = target[0];
int max = (source.length - target.length);
for (int i = 0; i <= max; i++) {
/* Look for first character. */
if (source[i] != first) {
while (++i <= max && source[i] != first);
}
/* Found first character, now look at the rest of v2 */
if (i <= max) {
int j = i + 1;
int end = j + target.length - 1;
for (int k = 1; j < end && source[j] == target[k]; j++, k++);
if (j == end) {
/* Found whole string. */
return i ;
}
}
}
return -1;
}

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-10-31 07:24:46

java模式匹配之蛮力匹配的相关文章

java模式匹配之蛮力匹配_java

java模式匹配之蛮力匹配 /** * 模式匹配之蛮力匹配 */ package javay.util; /** * Pattern Match Brute-Force * @author DBJ */ public class PMBF { /** * Pattern Match Brute-Force * @param target 目标串 * @param pattern 模式串 * @return 模式串在目标串中第一次出现的位置 */ public static int pattern

[算法系列之十二]字符串匹配之蛮力匹配

引言 字符串匹配是数据库开发和文字处理软件的关键.幸运的是所有现代编程语言和字符串库函数,帮助我们的日常工作.不过理解他们的原理还是比较重要的. 字符串算法主要可以分为几类.字符串匹配就是其中之一.当我们提到字符串匹配算法,最基本的方法就是所谓的蛮力解法,这意味着我们需要检查每一个文本串中的字符是否和匹配串相匹配.一般来说我们有文本串和一个匹配串(通常匹配串短于文本串).我们需要做的就是回答这个匹配串是否出现在文本串中. 概述 字符串蛮力匹配法的原理非常简单.我们必须检查匹配串的第一个字符与文本

正则验证-java 使用正则,匹配数据中的欠款金额

问题描述 java 使用正则,匹配数据中的欠款金额 A文件数据:1001分店20121231,元旦之际祝您新年快乐身体健康万事如意.您共欠担保公司¥103959.50元.请您尽快偿还欠款,以免扩大损失.您的借款已逾期6天,欠款金额为1988.20元,逾期将影响信用记录,请即刻缴纳.截止 2015年07月01日 您应还金额为:4128元.如有疑问,请联系王先生1101101010.你好,截至到昨天夜里23:59,你欠款34532.32元,请您尽快偿还欠款,以免扩大损失.你好,截至到昨天夜里23:5

求一个java中正则表达式,匹配所有标点符号,但除去‘-’和‘_’的

问题描述 求一个java中正则表达式,匹配所有标点符号,但除去'-'和'_'的 解决方案 可以使用正则表达式:(?=\pP)[^-_]测试:String ss = "测试test.df/:'-_";System.out.println(ss.replaceAll("(?=\pP)[^-_]", ""));输出:测试testdf-_解释:(1)前面部分(?=\pP)是个顺序环视正则表达式,只匹配位置不占用字符,匹配的位置是一个标点符号.(2)匹配到

java针对电话号码正则匹配实例_java

本文实例讲述了java针对电话号码正则匹配的方法.分享给大家供大家参考.具体如下: public interface RegExpConst { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ String MOBILE = "^1(3[0-9]|5[0-35-

java怎样用正则表达式匹配文档注释,如“/**@date 2012-1-2*/”?

问题描述 现在想做个把文件的文档注释删除的东西?不知道java怎样用正则表达式来匹配,请各位帮忙 问题补充:牟盖东 写道 解决方案 写了个例子,你可以参照下package iteyeQuestions;/* * java怎样用正则表达式匹配文档注释,如"斜杠**@date 2012-1-2*斜杠"? * 现在想做个把文件的文档注释删除的东西?不知道java怎样用正则表达式来匹配,请各位帮忙 */import java.io.BufferedReader;import java.io.B

Java使用正则表达式(regex)匹配中文实例代码_java

只能输入中文 /** * 22.验证汉字 * 表达式 ^[\u4e00-\u9fa5]{0,}$ * 描述 只能汉字 * 匹配的例子 清清月儿 */ @Test public void a1() { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String regex = "^[\\u4e00-\\u9fa5]*$"; Matcher m = Pattern.compile(regex).matc

Java正则之贪婪匹配、惰性匹配_java

贪婪量词: 先看整个字符串是不是一个匹配.如果没有发现匹配,它去掉最后字符串中的最后一个字符,并再次尝试.如果还是没有发现匹配,那么    再次去掉最后一个字符串,这个过程会一直重复直到发现一个匹配或者字符串不剩任何字符.简单量词都是贪婪量词. 惰性量词: 先看字符串中的第一个字母是不是一个匹配,如果单独着一个字符还不够,就读入下一个字符,组成两个字符的字符串.如果还没有发现匹配,惰性量词继续从字符串中添加字符直到发现一个匹配或者整个字符串都检查过也没有匹配.惰性量词和贪婪量词的工作方式恰好相反

Java基础--常用正则匹配符号(必背,必须背,死都要背)

1.字母:匹配单个字母 (1)A:表示匹配字母A: (2)\\:匹配转义字符"\": (3)\t:匹配转义字符"\t": (4)\n:匹配转义字符"\n": 2.一组字符:任意匹配里面的一个单个字符: (1)[abc]:表示可能是字母a,可能是字母b或者是字母c: (2)[^abc]:表示不是字母a,字母b,字母c的任意一个: (3)[a-zA-Z]:表示全部字母中的任意一个: (4)[0-9]:表示全部数字的任意一个: 3.边界匹配:在以后编写