在java中使用regex获取名称作为输入

时间:2015-08-30 12:30:07

标签: java regex

我是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

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

2 个答案:

答案 0 :(得分:2)

两个部分是错误的:

  • #include<stdio.h> int sizer(int *); int main() { int num; printf("Please an index: "); scanf("%d",&num); int array[num]; int size = sizer(array); //function to calculate array length /*answer is always 4*/ printf("%d\n", size); /*answer is correct*/ printf("%d\n", sizeof(array) / sizeof(array[0])); return 0; } /*function to calculate array length*/ int sizer(int *array) { return sizeof(array) / sizeof(array[0]); } $锚点在整个输入的上下文中被考虑,而不是在下一个标记的上下文中。它永远不会匹配,除非输入有一行与整个模式匹配。
  • 您使用默认分隔符,其中包含空格;因此,^永远不会返回带有空格的标记。

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

Scanner

Demo.

答案 1 :(得分:1)

此处的示例程序与正则表达式相关。

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

希望这会对你有所帮助