问题:
提示用户输入名称。这个名字可能有一个称呼,有效的称呼是“先生”和“女士”。接下来,在单个空格字符(如果有称呼)之后是第一个名称。在另一个空格字符之后,可能有也可能没有中间的首字母,这是一个单个大写字母,可能有也可能没有“。”。最后,在另一个空格之后,给出姓氏。名字和姓氏都以大写字母开头。使用单个正则表达式检查确定输入名称是否有效。如果有效,请打印名字和姓氏。如果没有,请让用户知道。
示例:
计划:请输入名称:
网友:Ryan D Scott先生
计划:Ryan Scott
计划:请输入名称:
用户:Ryan D. Scott先生
计划:Ryan Scott
计划:请输入名称:
用户:Ryan Scott
计划:Ryan Scott
计划:请输入名称:
用户:Ryan Scott先生
计划:Ryan Scott
计划:请输入名称:
用户:Ryan D Scott
计划:Ryan Scott
计划:请输入名称:
用户:第6名Fluffyface上尉
程序:名称无效。
计划:请输入名称:
用户:Spongebob Squarepants
计划:Spongebob Squarepants
我需要帮助修复正则表达式并让它输出只输入的名字和姓氏,如上例所示(更新后的代码)
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class lab2q2 {
public static void main(String[] args) {
String RegularExp = "((Mr|Ms))?[A-Z][a-z]+([A-Z]([a-z]+\\.))?([A-Z](a-z)+)";
Pattern pattern = Pattern.compile(RegularExp);
Scanner keyboard = new Scanner(System.in);
for(int i = 0; i< 11; i++)
{
System.out.println("Please enter a name: ");
String inputString = keyboard.nextLine();
Matcher matcher = pattern.matcher(inputString );
if (!matcher.matches())
{
System.out.println("Name: " + inputString);
}
else
{
System.out.println("Invalid name.");
}
}
keyboard.close();
}// end method main
}// end class
答案 0 :(得分:-1)
校正的
^(?:(?:Mr|Ms)\ )?([A-Z][a-z]+)\ (?:[A-Z]\.?\ )?([A-Z][a-z]+)$
答案 1 :(得分:-1)
(已编辑)我使用以下正则表达式检查了您的示例
((Mr |Ms ))?([A-z][a-z]*[ ]?)([A-Z]?(\\.){1}[ ]?)?([A-z]{1}[a-z]*[ ]?)
此外,不知道您可能获得的值的域名,但您应该考虑名称上的其他可能的字符(Ms Scarlett O'Hara
将无效)。
对于那些名称,您可以使用
((Mr |Ms ))?([A-Z][A-Za-z']*[ ]?)([A-Z]?(\.){1}[ ]?)?([A-z]{1}[A-Za-z']*[ ]?)
答案 2 :(得分:-1)
我认为您需要添加Pattern
。
import java.util.*;
public class lab2q2 {
public static void main(String[] args) {
String RegularExp = "((Mr|Ms))?[A-Z][a-z]+([A-Z]([a-z]+\\.))?([A-Z](a-z)+)";
Pattern pattern = Pattern.compile(RegularExp);
Scanner keyboard = new Scanner(System.in);
for(int i = 0; i< 11; i++)
{
System.out.println("Please enter a name: ");
String inputString = keyboard.nextLine();
Matcher matcher = pattern.matcher(inputString );
if(!matcher.matches()) {
System.out.println("Name: " + inputString);
}
else
{
System.out.println("Invalid name.");
}
}
keyboard.close();
}// end method main
}//