`
sunlujing
  • 浏览: 179826 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 实现含通配符的字符串匹配

阅读更多

算法目标,对于 字符串 abcd1dd2deeedd9 能偶匹配到字符串 abc*dd?;*代表任意个数的字符串,?代表一个字符.

分两步走,

第一步实现含?而不含*的 字符串匹配,如对dd?的匹配 

第二步,实现含有* 的字符串的匹配,如abc* dd?,主要思路是用* split 字符串,分为两个有效的串,abc, dd?

然后使用步骤一种的方法来查看匹配到的index.

 

 

 /**

   * 找出含?的字符串

   * @return

   */

  public int checkSubPattern(String src,int begin,String pat){

  boolean isFound=true;

  if(src.length()-begin < pat.length()){return -1;}

  for(int i=begin;i<src.length()-pat.length()+1;i++){

  for(int j=0;j<pat.length();j++){

  if(pat.charAt(j)!='?' && src.charAt(i+j)!=pat.charAt(j)){

  isFound =false;

  break;

  }

  isFound = true;

  }

  if(isFound){return i;}

  }

  return -1;

  }

 

 

 

  public boolean checkStar(String src,String pat){

  String[] sub_p = pat.split("\\*");

 

  int begin =0;

  for(int i=0;i< sub_p.length;i++){

 

   begin = checkSubPattern(src,begin,sub_p[i]);

   System.out.println(begin);

   if(begin==-1){return false;}

   if(i==0 && pat.charAt(i)!='*' &&begin!=0){return false;}

   if((i==sub_p.length-1)  && pat.charAt(i)!='*' &&begin!=(src.length()-                                      sub_p[i].length())){return false;}

  }

  return true;

  }

 

0
0
分享到:
评论
3 楼 瓶鱼跃 2012-11-01  
测试了楼主的方法,用楼主的字符串,怎么返回的是false??
2 楼 sunlujing 2012-10-29  
面试题,不让用正则表达式,他其实就是想让你分析下正则表达式的内部实现
1 楼 muyishuihan 2012-10-29  
为什么不用正则表达式做呢?
public static boolean isMatching(String src,String des){

String des1 = des.replace("*", "\\w*");
des1 = des1.replace("?", "\\w{1}");
Pattern p = Pattern.compile(des1);
Matcher m = p.matcher(src);
return m.matches();
}

相关推荐

    带通配符的字符串匹配.zip

    实现带通配符的字符串匹配算法有多种方法,包括但不限于: 1. **朴素匹配算法**:最直观的实现,逐字符比较,遇到通配符时进行特殊处理。这种方法效率较低,对大规模数据不适用。 2. **KMP算法**:适用于精确匹配,...

    wildcard-string-matching:字符串匹配,其中一个字符串包含通配符 (http

    通过理解通配符字符串匹配的原理,并结合Java编程,我们可以创建高效的解决方案来处理这类问题。无论是动态规划还是回溯搜索,都需要对字符串处理和算法设计有扎实的理解。实际开发中,可以根据具体需求和性能要求...

    华为-华为od题库练习题之字符串字符匹配.zip

    3. Rabin-Karp算法:Rabin-Karp算法利用哈希函数将字符串匹配问题转化为整数比较,通过滚动哈希值来减少比较次数。但这种方法对哈希冲突的处理要求较高。 4. BMH(Boyer-Moore-Horspool)算法:是Boyer-Moore算法的...

    Java正则表达式面试题解析:探索复杂匹配规则与高效字符串处理

    使用`Pattern`和`Matcher`类进行字符串匹配。首先,通过`Pattern.compile()`方法编译正则表达式,然后创建`Matcher`对象并调用`matches()`或`find()`方法进行匹配。 3. **贪婪匹配与非贪婪匹配的区别?** 贪婪...

    将您的字符串与通配符匹配

    本文将聚焦于一种特殊类型的字符串匹配,即通配符匹配。通配符是编程和计算机系统中用来代表任意字符或字符序列的特殊符号,通常用于模糊查找或模式匹配。在Java中,我们可以使用特定的类和方法来实现这种功能。 ...

    浅谈MySQL模糊查询中通配符的转义

    如果我们想要模糊查询带有通配符的字符串,如“60%”,“user_name”,就需要对通配符进行转义,有两种方式。如下:   1、反斜杠是转义符,通过反斜杠来转义%,使其不再是通配符。这里第一个%是通配符,第二个%不是...

    Java使用路径通配符加载Resource与profiles配置使用详解

    * *:匹配零个或多个字符串,如“cn/*/config.xml”将匹配“cn/javass/config.xml”,但不匹配匹配“cn/config.xml”。 * :匹配路径中的零个或多个目录,如“cn//config.xml”将匹配“cn/config.xml”,也匹配...

    oracle遍历数据库查找字符串

    这个名为"oracle遍历数据库查找字符串.jar"的工具可能实现了以下功能: 1. **连接配置**:用户可以输入数据库的URL、用户名、密码和实例信息,以便与Oracle数据库建立连接。 2. **字符串输入**:用户输入要查找的...

    java实现的搜索引擎

    Java提供了丰富的字符串处理和数据结构库,如`StringTokenizer`、`ArrayList`和`HashMap`,便于实现这些功能。 搜索引擎的架构通常包括爬虫、预处理、索引和查询四个部分。爬虫负责从互联网上抓取网页;预处理阶段...

    从文本文件中查找字符串

    Python、Java和Perl等编程语言都有强大的文件操作和字符串匹配库。例如,Python的`re`模块支持正则表达式,可以方便地遍历文件夹并查找字符串。下面是一个简单的Python示例: ```python import os import re def ...

    android客户端实现模糊查找

    1. **字符串匹配算法**:在Android中,常见的字符串匹配算法有Levenshtein距离(编辑距离)、Jaccard相似度、BM25等。这些算法能计算字符串之间的相似度,帮助找出与查询关键词最接近的匹配项。例如,Levenshtein...

    java模糊查询方法

    根据提供的文件信息,标题为“java模糊查询方法”,描述中提到了“为了实现子字符串匹配查询”。虽然实际代码示例与模糊查询不直接相关,但我们可以基于这些信息生成相关的Java模糊查询知识点。 ### Java模糊查询...

    select_txt_test.rar_字符串

    Python的`difflib`库可以计算字符串差异,`fnmatch`模块支持通配符匹配。 6. **高亮显示**:在找到查询结果后,为了突出显示,可以使用特殊字符或者CSS样式。在文本编辑器或网页中,可以设置查询到的字符串的背景色...

    Split-由任意个全角或半角空格分隔开的任意长度的字符串

    3. **模糊查询**:在数据库查询中,可以使用LIKE操作符结合通配符(如%)来实现模糊匹配。拆分后的关键词可以与数据库中的字段进行逐个比较。 4. **性能优化**:对于大量数据的查询,可能需要考虑性能优化,例如...

    wildcard:通配符模式匹配

    让 sWild 是一个通配符字符串,而 sTame 是一个非通配符字符串。 使用方法是: boolean match = Wildcard.matchFound(String sWild, String sTame); 返回值指示两个字符串是否匹配。 默认情况下,此方法区分大小...

    Java开发技术大全(500个源代码).

    ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...

    2023年开发岗位线上测试题目V1.pdf

    程序填空题的要求是将一个字符串匹配函数的五个空白填写完整,该函数需要实现带有$和*两种通配符的字符串匹配功能。 函数的参数和返回值的说明如下: * 参数:@pRule,以'\0'结束的字符串,表示规则;@pStr,以'\0...

    1.泛型类 、通配符的使用、通配符的上限和下限 编写泛型类Stack<E>,该类中定义一个成员变量和如下方法:

    在这个示例中,我们首先创建了一个`Stack&lt;String&gt;`实例,并向其中添加了三个字符串。接着,创建了一个`Stack&lt;Number&gt;`实例,并通过`pushAll`方法添加了整数。最后,通过`popAll`方法将元素移除并添加到了一个`Object...

    字符串搜索

    此外,正则表达式(Regular Expression,简称regex)是另一种强大的字符串搜索工具,能匹配复杂的模式,如邮箱地址、电话号码等。 对于大型项目或复杂代码库,简单的字符串搜索可能不足以满足需求。这时,我们可以...

    通配符比较

    标题中的“通配符比较”指的是在编程中使用特定的字符模式(通配符)来匹配和查找符合特定规则的字符串。在IT行业中,通配符通常用于文件搜索、命令行参数、正则表达式等领域,帮助用户或程序快速定位到符合规则的...

Global site tag (gtag.js) - Google Analytics