java - 检查字符串是否仅包含特定数字(例如“111”)
问题描述
需要找出给定的字符串是否只包含一个特定的数字——例如“111”、“2”、“33”应该返回真。
“12”应该返回假。
空字符串 ("") 也应该返回 true。
该字符串仅包含数字,不包含其他字符。
写了一个丑陋的 Java 正则表达式,它似乎可以工作,但不禁认为它应该以更短的方式编写:
str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")
有没有一种更简单、更优雅的方法来完成上述操作,避免一个一个地列出所有数字?
解决方案
您可以使用此正则表达式,它使用 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
推荐阅读
- r - 从栅格中提取值并附加到现有数据框
- excel - 导入xml文件
- javascript - 'for' 循环是否可以包含两个变量并使用 console.log
- javascript - jQuery显示输出但立即消失
- c# - 客户端/服务器应用程序,如何以域用户的身份在远程系统上创建进程,而不将该用户的用户名/密码传输到远程系统?
- sql - 使用外部查询结果的 MS Access SQL 子查询
- javascript - 用 Javascript 显示 2 个随机数
- sql - 为什么存储过程同时启动多个事务?还是跳过执行步骤?
- python - 如何在我的 Django 模型中表示美国的一个州?
- java - JPA - 重用来自不同类的规范