我想检查String
的数字是否与正则表达式相同。
public static boolean check5(String s){
Pattern p5 = Pattern.compile("(..)*");
Matcher m5 = p5.matcher(s);
if (m5.find()){
return true;
} else {
return false;
}
}
问题是他总是回归真实,我不知道为什么?
答案 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()代替