正则表达式,一次或多次匹配非字符

时间:2018-12-08 19:57:19

标签: java regex

我对这段代码有疑问,特别是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循环捕获。 >

谢谢您的帮助!

3 个答案:

答案 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}