Java:限制字符串中的字符

时间:2015-01-13 23:39:32

标签: java string character java.util.scanner

我如何通过扫描仪和字符串接受用户接受SPECIFIC字符?

E.g。如果我只想要两个角色," *"和" " (空格)用于输入。其他所有内容都将无效,并会提示用户该内容不足并在不提交的情况下重做该条目。

干杯!

3 个答案:

答案 0 :(得分:1)

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

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

请注意,将空字符串作为有效字符传递,由您的用例决定是否另外验证字符串的长度。

答案 1 :(得分:1)

如果要在之后检查字符串的内容,则可以检查它是否与正则表达式[* ]+匹配,这意味着:一个或多个系列(+量词)字符'*'' '(空格)。

代码:

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);

答案 2 :(得分:0)

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

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

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