我是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
同一行打印两次,它再次要求我输入。我哪里错了?
答案 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
答案 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();
希望这会对你有所帮助