Java-检查字符串是否包含相同的数字
我有一个Java-检查字符串是否包含相同的数字,java,regex,string,validation,Java,Regex,String,Validation,我有一个int,例如: 151515 1 1111111 4848484 111 888 我需要测试/检查数字是否仅包含1s,有效示例: 1 11111 1111111111 11 88888888888 8885555 4747 7 889 无效示例: 1 11111 1111111111 11 88888888888 8885555 4747 7 889 有什么建议吗? 可能有任何regex?或者有一种不使用正则表达式的快速解决方案,将值保留为int,而不将其解析为字符串。答案概念
int
,例如:
151515
1
1111111
4848484
111
888
我需要测试/检查数字是否仅包含1s,有效示例:
1
11111
1111111111
11
88888888888
8885555
4747
7
889
无效示例:
1
11111
1111111111
11
88888888888
8885555
4747
7
889
有什么建议吗?
可能有任何regex
?或者有一种不使用正则表达式的快速解决方案,将值保留为int,而不将其解析为字符串。答案概念
1.首先将int转换为string。
2.然后试试这个正则表达式:
"^[1]*$"
3.通过使用java regexp模式匹配
传递字符串和模式匹配的
int
数量非常有限,因此您可以这样做
if (i == 1 || i == 11 || i == 111 || ..... )
编译器将告诉您何时停止(“literal对于int来说太大”)。您可以这样尝试:
String str = "1111111";
System.out.println(str.matches("^[1]+$"));
String str = String.valueOf(nums);
if (str.replaceAll("1", "").length() == 0) {
// it contains all ones
}
您可以这样尝试:
String str = "1111111";
System.out.println(str.matches("^[1]+$"));
String str = String.valueOf(nums);
if (str.replaceAll("1", "").length() == 0) {
// it contains all ones
}
那么:
public boolean isAllOnes(int num) {
for (int powerOf10 = 10; ; powerOf10 *= 10) {
if (num * 9 == powerOf10 - 1) {
return true;
}
if (powerOf10 > Integer.MAX_VALUE / 10) {
return false;
}
}
}
这不涉及正则表达式或转换为字符串,但我不知道它是否真的比其他答案快。(Thilo的暴力解决方案可能是最快的。)这将匹配一个空
字符串。您可以将*
替换为+
,以防止出现这种情况。@Titus如果他将整数转换为字符串,则不可能为空。@ajb哦,是的,您是对的。我没有考虑过。