需要找出给定的字符串是否仅仅包含特定数字-例如,“ 111”,“ 2”,“ 33”应返回true。
“ 12”应返回false。
空字符串(“”)也应返回true。
该字符串仅包含数字,没有其他字符。
编写了一个看起来有效的丑陋的Java正则表达式,但不禁认为应该以更短的方式编写它:
str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")
Run Code Online (Sandbox Code Playgroud)
有没有一种更简单,更优雅的方法来进行上述操作,而又避免了所有数字一一列出?
您可以使用此正则表达式,该正则表达式使用group捕获第一个数字,然后使用向后引用以确保后面的数字都相同,
^(\d)?\1*$
Run Code Online (Sandbox Code Playgroud)
说明:
^ -字符串开始(\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*"));
});
Run Code Online (Sandbox Code Playgroud)
印刷品
5 --> true
5555 --> true
11111 --> true
22222 --> true
1234 --> false
--> true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |