我对这段代码有疑问,特别是while循环中的代码。
public void mSetSafeCode() // Manually define safe passcode
{
int mIntPasscode;
String mStringPasscode;
Scanner sc = new Scanner(System.in);
System.out.print("Enter your desired numerical passcode (max 3 digits): ");
mStringPasscode = sc.nextLine();
while(mStringPasscode.matches("\\D+") || mStringPasscode.length() > 3 || mStringPasscode.length() < 3) // If input not digit or exceeds length
{
System.out.print("Error! You inputted an invalid passcode, try again: ");
mStringPasscode = sc.nextLine(); // Prints error, gets user to input again
}
mIntPasscode = Integer.parseInt(mStringPasscode); // If while is not met, parses input into an integer
System.out.println("You've set the numerical passcode to " + mIntPasscode); // Prints the passcode
}
我正在尝试这样做,以使扫描仪的用户输入包含非数字字符时引发错误。我相信我的正则表达式对于\\D+
是正确的,但是例如,如果我要使用'f33'作为输入,则它不会陷入while循环中。我认为这是因为我使用的是字符串长度的or,但是如果它包含一个字符(不是数字)或者其长度大于/小于3,我希望它被while循环捕获。 >
谢谢您的帮助!
答案 0 :(得分:4)
在您的=1*regexreplace(index(importdata("https://api.kraken.com/0/public/Ticker?pair=XXBTZEUR"),20),"[^\d|\.]","")
循环中,您有:
while
您希望它是
while(mStringPasscode.matches("\\D+")
说明:
while(!mStringPasscode.matches("\\d+")
与非数字匹配,但这仅在整个\\D+
为非数字时才匹配。您要使用String
,如果\\d+
中的任何字符不是数字,则返回false。 String#matches
与整个 String
相匹配,因此,如果有一个不匹配的字符,它将返回false。
String
示例输出:
while(!mStringPasscode.matches("\\d+") || mStringPasscode.length() != 3)
{
System.out.print("Error! You inputted an invalid passcode, try again: ");
mStringPasscode = sc.nextLine(); // Prints error, gets user to input again
}
答案 1 :(得分:1)
使用[0-9]{3}
只会导致3位数字的匹配。 [\\d]{3}
也可以。
答案 2 :(得分:1)
如果只允许输入3个数字,最好写上
[0-9]{1,3}