我有这个循环让用户卡住输入值,直到他/她输入有效的东西,在这种情况下它必须是二进制数,必须是某种类型变量的大小。尽管如此,我还不知道如何在用户输入由1和0之外的不同内容组成的数字的情况下继续循环。
我在考虑使用string.contains()
,但这不能说明每一个数字。这是我的循环:
while((double)inputStr.length() != table.getNumberOfVariables() ||
inputStr.replaceAll("\\D","").length() != inputStr.length() ||
Double.parseDouble(inputStr) > 1){
这一行:Double.parseDouble(inputStr) > 1
应该可以实现,但我正在处理十进制数,所以如果输入是10或100,它们将被渲染为无效。
答案 0 :(得分:0)
在你的情况下,不是在你的正则表达式中使用\D
(任何不是数字的东西),你必须更具体:[^01]
(意思是:任何不是零或一个)。
while((double)inputStr.length() != table.getNumberOfVariables() ||
inputStr.replaceAll("[^01]","").length() != inputStr.length() ||
Double.parseDouble(inputStr) > 1){
虽然它并不能为你赢得一个好的代码奖,因为这段代码的读者很难找到你在做什么。最好将你正在做的事情变成一个名称清晰的方法,例如:
public static boolean containsOnly(String s, String only) {
for (int i = 0; i < s.length(); i++) {
if (only.indexOf(s.charAt(i)) == -1)
return false;
}
return true;
}
实际上,Apache commons-lang3库中有这样一种方法:StringUtils.containsOnly
。它们有许多字符串操作方法,它们比使用正则表达式更清晰,通常要快得多。
答案 1 :(得分:0)
您可以使用正则表达式来验证二进制字符串:
String s = "0101110";
if (s.matches("[01]++")) {
System.out.println("ok");
} else {
System.out.println("invalid");
}