使用正则表达式检查数字是否为偶数

9

我们能否使用正则表达式来检测一个数字是否为偶数?

我在想,是否可以使用正则表达式来代替通常的%或位运算。

谢谢回复 :)


3
正则表达式作用于字符串,但偶数是数字的一个属性。你所提供的数字是以字符串格式呈现的吗? - AakashM
13
请只是思考这个问题,不要实际去做。原始整数类型(byte,short,int和long)用于存储数字,BigInteger用于存储非常大的数字,字符串用于存储字符串。 - helios
6个回答

57

你可以尝试:

^-?\d*[02468]$

解释:

  • ^ : 开始锚点。
  • -? : 可选的减号。
  • \d* : 零个或多个数字。
  • [02468] : 字符类匹配 0 或 2 或 4 或 6 或 8。
  • $ : 结束锚点。

1
最快速并带有解释。致敬。 - Stephan Muller
4
很好,你没有忘记负数值的存在。;) - Caspar Kleijne

22

已经给出了正确的答案,我认为正则表达式不是我的首选。

  • 如果该数字符合 long 范围,可以使用 %
  • 如果不符合,可以使用BigInteger.remainder(..),但也许检查最后一个char是否代表偶数数字会更有效率。

6
另一个技巧是检查最右边的数字是否为0或1,即:(n&1)== 1。如果为True,则表示这个数是奇数,反之则是偶数。 - Hendra Jaya

3
如果它是一个字符串,只需检查endsWith(0) || endsWith(2) || ..是否返回true。如果它是数字,则非常简单。

1
尝试一下吧,我不确定它是否在Java中具有相同的语法:
^\d*(2|4|6|8|0)$

1

没问题,你只需要检查最后一个数字是否为0/2/4/6/8


0

永远不要使用正则表达式来完成可以用其他简单方式完成的工作。

我遇到了这篇微软博客,它也说了同样的话:链接


你能详细说明一下链接中的内容吗?或者为什么在这种情况下不使用正则表达式? - Jon Lin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接