首页 > 解决方案 > 检查字符串是否仅包含特定数字(例如“111”)

问题描述

需要找出给定的字符串是否只包含一个特定的数字——例如“111”、“2”、“33”应该返回真。

“12”应该返回假。

空字符串 ("") 也应该返回 true。

该字符串仅包含数字,不包含其他字符。

写了一个丑陋的 Java 正则表达式,它似乎可以工作,但不禁认为它应该以更短的方式编写:

str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")

有没有一种更简单、更优雅的方法来完成上述操作,避免一个一个地列出所有数字?

标签: javaregexstring

解决方案


您可以使用此正则表达式,它使用 group 捕获第一个数字,然后使用反向引用来确保以下数字都相同,

^(\d)?\1*$

解释:

  • ^- 字符串的开始
  • (\d)?- 匹配一个数字并在 group1 中捕获,并?使其可选以允许匹配空字符串。
  • \1*- 匹配相同的数字零次或多次
  • $- 字符串结束

正则表达式演示

Java代码,

List<String> list = Arrays.asList("5","5555","11111","22222","1234", "");
list.forEach(x -> {
    System.out.println(x + " --> " + x.matches("(\\d)?\\1*"));
});

印刷,

5 --> true
5555 --> true
11111 --> true
22222 --> true
1234 --> false
 --> true

推荐阅读