正则表示式实例1--判断某个数是不是4的幂数

方法一,直接使用String.matches();

public class TestRegex1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i;
        do{
            System.out.print("输入:");
            i = scan.nextInt();
            String s = Integer.toBinaryString(i);
            //4的幂数的二进制形式都是以1开头,后面跟双数个0
            System.out.println(s.matches("1(00)*"));
        }while(i!=0);
        scan.close();
    }
}

方式二:使用Pattern+Matcher

public class TestRegex1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i;
        Pattern p = Pattern.compile("1(00)*");//编译正则表达式
        do{
            System.out.print("输入:");
            i = scan.nextInt();
            String s = Integer.toBinaryString(i);
            //p.matcher(s),获取Matcher实例,获取时需要传入待匹配的字符串,Matcher.maches(),判断字符串是否符合正则表达式的模式
            System.out.println(p.matcher(s).matches());
        }while(i!=0);
        scan.close();
    }
}

方式一与方式二的比较:

  1. 当比较一次的时候,第一种方式比较简洁
  2. 当需要多次比较,即用多个字符串匹配一个正则表达式的时候,方式二比较迅速
  3. 一些功能只能由方式二实现,方式一实现不了,如find(),group()等。

    需要注意的是,方式一底层是用方式二实现的:

    public boolean matches(String regex) {
        return Pattern.matches(regex, this);
    }
    public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

正则表达式都需要先编译才能使用。

你可能感兴趣的:(实例,正则)