我有一个int
例如:
151515
1
1111111
4848484
111
888
我需要测试/检查数字是否仅包含1,有效示例:
1
11111
1111111111
11
无效的例子:
88888888888
8885555
4747
7
889
有什么建议吗?
可能是任何regex
?或者有一个没有正则表达式的快速解决方案,并将值保存为int而不将其解析为String。
答案 0 :(得分:9)
你可以这样试试:
String str = String.valueOf(nums);
if (str.replaceAll("1", "").length() == 0) {
// it contains all ones
}
答案 1 :(得分:4)
只有非常有限的int
匹配,所以你可以
if (i == 1 || i == 11 || i == 111 || ..... )
编译器会告诉你何时停止(“文字对于int来说太大了”)。
答案 2 :(得分:1)
怎么样:
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的蛮力解决方案可能是最快的。)
答案 3 :(得分:0)
回答概念 1.首先将int转换为字符串。 2.然后试试这个正则表达式:
"^[1]*$"
3.使用java regexp模式匹配 传递字符串和模式
答案 4 :(得分:0)