zoukankan      html  css  js  c++  java
  • 华为OJ平台——字符串通配符

    题目描述:

    在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
    要求:
    实现如下2个通配符:
      *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)(不包含. , 等特殊字符
      ?:匹配1个字符

    输入
      通配符表达式;
      一组字符串。

    输出
      返回匹配的结果,正确输出true,错误输出false

    思路:

     分三种情况:

     (1)无通配符的情况:对应的字符要完全相等,否则匹配失败,输出false

     (2)通配符为?的情况:对应的一个字符是字母(不区分大小写)或数字,否则匹配失败,输出false

     (3)通配符为*的情况:匹配字符串中下一个非字母和数字的字符必须与*后的字符相同,否则匹配失败,输出false

     如果最后经过循环后没有false输出,则表明匹配成功,输出true

      1 import java.util.Scanner;
      2 
      3 /**
      4  * 在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。
      5  * 现要求各位实现字符串通配符的算法。
      6  * 要求:
      7  * 实现如下2个通配符:
      8   *   *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
      9    *   ?:匹配1个字符
     10  * 
     11  * 输入
     12  *         通配符表达式;
     13  *         一组字符串。
     14  * 输出
     15  *         返回匹配的结果,正确输出true,错误输出false
     16  *
     17  */
     18 public class StringMatch {
     19 
     20     public static void main(String[] args) {
     21         //输入,读入两行字符
     22         Scanner cin = new Scanner(System.in) ;
     23         String str = cin.nextLine() ;
     24         String strMatch = cin.nextLine() ;
     25         cin.close(); 
     26         
     27         int len = str.length() ;
     28         int lenMatch = strMatch.length() ;
     29         int i = 0 ;
     30         int j = 0 ;
     31         
     32         char temp ;
     33         //循环比较,判断条件是当任一个到达字符串尾时结束循环
     34         while(i < len && j < lenMatch ){
     35             /*
     36              * 分三种情况:
     37              *     (1)无通配符的情况:对应的字符要完全相等,否则匹配失败,输出false
     38              *     (2)通配符为?的情况:对应的一个字符是字母(不区分大小写)或数字,
     39              *         否则匹配失败,输出false
     40              *     (3)通配符为*的情况:匹配字符串中下一个非字母和数字的字符必须与*后的字符相同,
     41              *         否则匹配失败,输出false
     42              * 如果最后经过循环后没有false输出,则表明匹配成功,输出true
     43              */
     44             if(str.charAt(i) != '*' && str.charAt(i) != '?' ){
     45                 //(1)无通配符的情况
     46                 if(str.charAt(i) != strMatch.charAt(j)){
     47                     //匹配失败,输出false
     48                     System.out.println("false");
     49                     return ;
     50                 }else{
     51                     //匹配成功,进入各自下一个字符的匹配
     52                     i++ ;
     53                     j++ ;
     54                     continue ;
     55                 }
     56             }else if(str.charAt(i) == '?'){
     57                 //(2)通配符为?的情况
     58                 temp = strMatch.charAt(j) ;
     59                 if(       (temp >= 'a' && temp <= 'z')
     60                     || (temp >= 'A' && temp <= 'Z') 
     61                     || (temp >= '0' && temp <= '9')){
     62                     //匹配成功,进入各自下一个字符的匹配
     63                     i++ ;
     64                     j++ ;
     65                     continue ;
     66                 }else{
     67                     //匹配失败,输出false
     68                     System.out.println("false");
     69                     return ;
     70                 }
     71             }else{
     72                 //(3)通配符为*的情况
     73                 temp = strMatch.charAt(j) ;
     74                 if(       (temp >= 'a' && temp <= 'z')
     75                     || (temp >= 'A' && temp <= 'Z') 
     76                     || (temp >= '0' && temp <= '9')){
     77                     //strMatch的当前字符匹配成功,进入strMatch的下一个字符的匹配
     78                     j++ ;
     79                     continue ;
     80                 }else{    
     81                     //匹配字符串中下一个非字母和数字的字符必须与*后的字符相同,
     82                     //表明StrMatch的当前字符为非数字、字母的字符,必须匹配str中*后一个字符
     83                     if(i == (len-1)){
     84                         //如果str中*是最后一个,则匹配失败,输出false
     85                         System.out.println("false");
     86                         return ;
     87                     }else{    
     88                         //如果str中*不是最后一个,则继续str中的下一个,继续匹配
     89                         i++ ;
     90                         continue ;
     91                     }
     92                 }                
     93             }
     94         }
     95         
     96         System.out.println("true");
     97         return ;
     98     }
     99 
    100 }
    View Code
  • 相关阅读:
    windows权限维持之注册表
    mstsc痕迹清理
    内网常用爆破手法
    RDP攻击&防御
    Java SPI 机制
    mysqldump 数据库备份
    Redis分布式锁
    Seata分布式事务中间件学习和实践
    pytube
    idea github登录
  • 原文地址:https://www.cnblogs.com/mukekeheart/p/5596807.html
Copyright © 2011-2022 走看看