Java:限制字符串中的字符

Java: Limiting characters in a string

我将如何通过扫描仪和字符串接受用户的特定字符?

例如如果我只想要两个字符,“*”和“”(一个空格)用于输入。其他的都是无效的,会提示用户输入不足,重做不提交。

干杯!

String input = scanner.nextLine();
if (!(input.matches("[ *]*"))) {
    System.out.println("Please use only space and * characters");
    // do something that causes program to loop back and redo input
}

matches 测试整个 input 字符串是否与模式匹配。该模式由字符 class 中的零个或多个字符序列匹配(第二个 * 表示零次或多次出现),字符 class 由两个字符 space 和 *.

如果你需要输入至少一个字符,把第二个*改成+,还要改一下错误信息。或者添加一个单独的 input.isEmpty() 测试。

关于Scanner:使用scanner.nextLine()输入整行。 (其他 Scanner 方法在看到 space 个字符时往往会停止,这不是我认为您想要的。)

您可以使用 RegEx 字符集排除:

if (input.matches(".*[^* ].*")) {
    //wrong input
} else {
    //ok!
}

请注意,将传递一个空字符串作为有效字符串,是否额外验证字符串的长度取决于您的用例。

如果你想在输入 之后检查字符串的内容 那么你可以检查它是否匹配正则表达式 [* ]+ 这意味着:一个或多个系列 (+ 字符的量词 '*'' ' (space).

代码:

System.out.print("Please provide string containing only spaces or * : ");
String userInput = //read input from user
while(!userInput.matches("[* ]+")){
    System.out.println("Your input was incorrect.");
    System.out.print("Please provide string containing only spaces or * : ");
    userInput = //read input from user
}
//here we know that data in userInput are correct
doSomethingWithUserData(userInput);