使用regex Java检查字符串的数量是否均匀

时间:2016-11-11 10:02:50

标签: java eclipse

我想检查String的数字是否与正则表达式相同。

public static boolean check5(String s){
    Pattern p5 = Pattern.compile("(..)*");
    Matcher m5 = p5.matcher(s);
    if (m5.find()){
        return true;
    } else {
        return false;
    }
}

问题是他总是回归真实,我不知道为什么?

3 个答案:

答案 0 :(得分:4)

不要使用正则表达式;它们并非真正用于验证数字

相反,将String解析为整数类型(例如num),如果抛出任何异常则拒绝,然后使用

num % 2 == 0

作为你对均匀度的考验。如果出于某种原因,您绝对必须使用正则表达式,那么请使用[0-9]*[02468]行中的内容。它令人惊讶地简单地用于2的可分性测试,就像5和10一样。但是尝试用正则表达式测试可分性3,更不用说7了。

最后,如果我在这里完全没有错误的结尾,你要做的就是检查s的长度是否再次,不要使用正则表达式,但是

s.length() % 2 == 0

作为支票。

答案 1 :(得分:1)

将正则表达式更改为以下,以检查字符串长度是否均匀。

class B
{
    std::unique_ptr<A> a;
    public:
       B() : a(new A()) {}
       B& operator = (const B & src)
         { if (this != &src)
              a.reset(src.a.get() ? new A(*src.a) : nullptr);
           return *this;
         }
      ~B() {} // no more usefull
      void display()
      {
        cout<<"inside B's display"<<endl;
        a->display();   
      }
};

它匹配零个或多个两个字符集,所有这两个字符都锚定在字符串的开头和结尾

答案 2 :(得分:0)

Matcher.find()将搜索给定String中的出现或正则表达式。 对于(..)*将搜索任意两个字符零次或多次。 因此,“ABC”将使find()= true,因为它可以找到“AB”或“BC”。 所以使用Matcher.matches()代替