程序说我的所有有效输入都是无效的(可能是REGEX代码问题?)

时间:2017-05-24 18:35:05

标签: java regex matching

问题:

提示用户输入名称。这个名字可能有一个称呼,有效的称呼是“先生”和“女士”。接下来,在单个空格字符(如果有称呼)之后是第一个名称。在另一个空格字符之后,可能有也可能没有中间的首字母,这是一个单个大写字母,可能有也可能没有“。”。最后,在另一个空格之后,给出姓氏。名字和姓氏都以大写字母开头。使用单个正则表达式检查确定输入名称是否有效。如果有效,请打印名字和姓氏。如果没有,请让用户知道。

示例:

计划:请输入名称:

网友: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

3 个答案:

答案 0 :(得分:-1)

  • 你的最后一个(a-z)+应该是[a-z] +
  • 你不允许空间,而你没有。在最初的
  • 中是可选的
  • 初始值应为[A-Z]而不是[A-Z] [a-z] +
  • 你不匹配行开头和结尾

校正的

^(?:(?: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
}//