Java:限制字符串中的字符

Java:限制字符串中的字符,java,string,character,java.util.scanner,Java,String,Character,Java.util.scanner,如何通过扫描器和字符串接受用户指定的字符 例如,如果我只需要两个字符,“*”和“”(一个空格)作为输入。其他所有内容都将无效,并将提示用户该内容不足,并在不提交的情况下重做条目 干杯 String input = scanner.nextLine(); if (!(input.matches("[ *]*"))) { System.out.println("Please use only space and * characters"); // do something that

如何通过扫描器和字符串接受用户指定的字符

例如,如果我只需要两个字符,“*”和“”(一个空格)作为输入。其他所有内容都将无效,并将提示用户该内容不足,并在不提交的情况下重做条目

干杯

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
}
匹配
测试整个
输入
字符串是否与模式匹配。模式由字符类中的零个或多个字符序列匹配(第二个
*
表示零个或多个出现),字符类由两个字符空间和
*
组成

如果需要输入至少一个字符,请将第二个
*
更改为
+
,但也要更改错误消息。或者添加一个单独的
input.isEmpty()
test


至于
扫描仪
:使用
Scanner.nextLine()
输入整行。(其他
Scanner
方法在看到空格字符时往往会停止,这不是我认为您希望看到的。)

您可以使用正则字符集排除:

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

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

如果您想在输入字符串后检查字符串的内容,那么您可以检查它是否匹配regex
[*]+
,这意味着:一个或多个(
+
量词)的系列字符数
'*'
'
(空格)

代码:


正则表达式和while循环;)非常简单,它出色地完成了工作!谢谢!!:)
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);