gpt4 book ai didi

java - 在 Java 中使用正则表达式获取名称作为输入

转载 作者:行者123 更新时间:2023-11-30 08:09:39 24 4
gpt4 key购买 nike

我是 Java 和正则表达式的初学者。我想获得一个名称作为输入,我的意思是只有具有英文字母 A-Z、不区分大小写和空格的名称。

我正在使用 Scanner 类来获取我的输入,但我的代码不起作用。看起来像:

Scanner sc= new Scanner(System.in);
String n;

while(!sc.hasNext("^[a-zA-Z ]*$"))
{
System.out.println("That's not a name!");
sc.nextLine();
}
n = sc.next();

我在网站上检查了我的正则表达式 regex101.com并发现它工作正常。

例如,如果我输入我的名字 Akshay Arora ,正则表达式网站说没问题,但我的程序会打印

That's not a name
That's not a name

同一行打印了两次,它再次要求我输入。我哪里错了?

最佳答案

有两部分是错误的:

  • $^ anchor 在整个输入的上下文中被考虑,而不是在下一个标记的上下文中。它永远不会匹配,除非输入有一行与整个模式匹配。
  • 您使用默认分隔符,其中包括空格;因此,Scanner 永远不会返回包含空格的标记。

以下是解决此问题的方法:

Scanner sc = new Scanner(System.in);
sc.useDelimiter("\n");
String n;

while(!sc.hasNext("[a-zA-Z ]+"))
{
System.out.println("That's not a name!");
sc.nextLine();
}
n = sc.next();

Demo.

关于java - 在 Java 中使用正则表达式获取名称作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com