需要找出给定的字符串是否仅仅包含特定数字- 例如“ 111”,“ 2”,“ 33”应返回true。
“ 12”应返回false。
空字符串(“”)也应返回true。
该字符串仅包含数字,没有其他字符。
写了一个看起来不错的丑陋的Java正则表达式,但不禁以为应该以更短的方式编写它:
str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")
是否有一种更简单,更优雅的方法来进行上述操作,而避免一个一一列出所有数字?
答案 0 :(得分:9)
您可以使用此正则表达式,该正则表达式使用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