我们什么时候应该使用模式和匹配器?

时间:2015-09-28 14:04:29

标签: java regex

我今天遇到了一个问题,问题是:

假设我想查找以下子字符串的总出现次数:

Any substring that starts with 1 followed by any(0 or more) number of 0's 
and then followed by 1.

我用两种方式解决了这个问题:

方法1

我为它形成了一个正则表达式:1[0]*1并使用PatternMatcher类来解决问题。

方法2

每当模式匹配时,我遍历字符串并递增计数器。

我的问题是,与我的第二种方法相比,我的第一种方法非常低效。我认为内置函数的使用效率更高。在所有情况下都不会发生这种情况。时间间隔非常大。

以下是证据:

import java.util.regex.*;
class Pat_mat
{
 public static void main(String []args)
 {
     String str="111011010000001011";
     Pattern p=Pattern.compile("10*(?=1)");
     Matcher matcher=p.matcher(str);
     int s=0,i;
     long st=System.nanoTime();
     while(matcher.find())
      ++s;
     long ft=System.nanoTime()-st;      
     System.out.println("time taken by inbuilt fn "+ft);
     System.out.println("output: "+s);
     s=0;i=0;
     st=System.nanoTime();
     while(i<str.length())
     {
         if(str.charAt(i)!='1')
          {++i;continue;}
         else
         {
             if(i+1<str.length()&&str.charAt(i+1)=='1')
              ++s;
             else if(i+1<str.length()&&str.charAt(i+1)=='0')
              {while(i+1<str.length()&&str.charAt(i+1)=='0')
               ++i;               
             if((i+1)<str.length()&&str.charAt(i+1)=='1')
              ++s;}
         }
         ++i;
     }     
     ft=System.nanoTime()-st; 
     System.out.println("time taken by my way "+ft);
     System.out.println("output: "+s);
 }
}

0 个答案:

没有答案