检查字符串是否仅包含特定数字(例如“ 111”)

时间:2019-05-09 16:32:21

标签: java regex string

需要找出给定的字符串是否仅仅包含特定数字- 例如“ 111”,“ 2”,“ 33”应返回true。

“ 12”应返回false。

空字符串(“”)也应返回true。

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

写了一个看起来不错的丑陋的Java正则表达式,但不禁以为应该以更短的方式编写它:

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

是否有一种更简单,更优雅的方法来进行上述操作,而避免一个一一列出所有数字?

1 个答案:

答案 0 :(得分:9)

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

^(\d)?\1*$

说明:

  • ^-字符串的开头
  • (\d)?-匹配一位数字并捕获到group1中,而?使其成为可选以允许匹配空字符串。
  • \1*-相同的数字匹配零次或多次
  • $-字符串结尾

Regex Demo

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