我正在使用java扫描程序从System.in读取输入。我需要读取字母数字行,包括空格/制表符,但不是新行,也不应该允许空输入。
例如:
a new name
或
a-new-name-1
这是我的扫描仪:
Scanner reader = new Scanner(System.in);
我试过这些方法:
String name = reader.nextLine();
或
String name = reader.next("^[A-Za-z0-9- ]+$");
或
name = reader.next("/^[a-z\\d\\-_\\s]+$/i");
对于输入的最后2个案例"测试名称1" ,我有错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.next(Scanner.java:1418)
............
当使用reader.nextLine()时,它会跳过等待下一个输入。例如:
对于此部分代码:
System.out.println("Do you want to update audience name?[y/n]");
opt = reader.next().trim();
if( opt.equalsIgnoreCase("y") )
{
System.out.println("Enter audience name : ");
name = reader.nextLine();
}
System.out.println("Do you want to update audience description?[y/n]");
opt = reader.next().trim();
if( opt.equalsIgnoreCase("y") )
{
System.out.println("Enter audience description : ");
description = reader.nextLine();
}
我看到了这一点:
Do you want to update audience name?[y/n]
y
Enter audience name :
Do you want to update audience description?[y/n]
y
Enter audience description :
Do you want to update audience rule?[y/n]
我可以在这里得到任何帮助吗?
答案 0 :(得分:0)
您可以使用:
String name = reader.next("^[\\w\\p{Space}-]+$");
Java中没有正则表达式分隔符/
。
如果您使用Java 8
,则可以使用\h
来匹配水平空格:
String name = reader.next("^[\\w\\h-]+$");
完整代码:
Scanner reader = new Scanner(System.in);
reader.useDelimiter("\\R");
while(!reader.hasNext("^[\\w\\h-]+$")) {
System.out.println("Only enter letters, numbers, hyphen, underscore or whitespace");
reader.next();
}
String name = reader.next();
System.out.println("valid Input: " + name);
reader.close();
答案 1 :(得分:0)
FOllow Jonny Henly的建议。混合了reader.next和reader.nextLine就是问题所在。