Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程序说我所有的有效输入都无效(可能是正则表达式代码问题?)_Java_Regex_Matching - Fatal编程技术网

Java 程序说我所有的有效输入都无效(可能是正则表达式代码问题?)

Java 程序说我所有的有效输入都无效(可能是正则表达式代码问题?),java,regex,matching,Java,Regex,Matching,问题: 提示用户输入名称。姓名可能有称呼语,有效称呼语为“先生”和“女士”。接下来,在一个空白字符后面,如果有称呼,则是名字。在另一个空白字符之后,可能有也可能没有中间的首字母,这是一个大写字母,后面可能有也可能没有“.”。最后,在另一个空格后,给出姓氏。名字和姓氏都将以大写字母开头。使用单个正则表达式检查确定输入名称是否有效。如果有效,请打印名字和姓氏。如果没有,请让用户知道 例如: 程序:请输入一个名称: 用户:Ryan D Scott先生 节目:瑞安·斯科特 程序:请输入一个名称: 用户:

问题:

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

例如:

程序:请输入一个名称:

用户:Ryan D Scott先生

节目:瑞安·斯科特

程序:请输入一个名称:

用户:Ryan D.Scott先生

节目:瑞安·斯科特

程序:请输入一个名称:

用户:Ryan Scott

节目:瑞安·斯科特

程序:请输入一个名称:

用户:赖恩·斯科特先生

节目:瑞安·斯科特

程序:请输入一个名称:

用户:Ryan D Scott

节目:瑞安·斯科特

程序:请输入一个名称:

用户:第六号,福拉夫面船长

程序:无效名称

程序:请输入一个名称:

使用者:海绵宝宝

节目:海绵宝宝

我需要帮助修复正则表达式,并让它输出输入的名字和姓氏,如上面更新的代码示例所示

 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
你最后的a-z+应该是[a-z]+ 你不允许有空格,你也没有做。首字母为可选 首字母应该是[A-Z]而不是[A-Z][A-Z]+ 你们不符合线路的起点和终点 纠正

^(?:(?:Mr|Ms)\ )?([A-Z][a-z]+)\ (?:[A-Z]\.?\ )?([A-Z][a-z]+)$

我用下面的regexp检查了您的示例

((Mr |Ms ))?([A-z][a-z]*[ ]?)([A-Z]?(\\.){1}[ ]?)?([A-z]{1}[a-z]*[ ]?)
另外,不知道你将得到的可能值的范围,但你应该考虑到斯佳丽·奥哈拉女士名字上的一些其他可能的字符是无效的。 对于这类名称,您可以使用

((Mr |Ms ))?([A-Z][A-Za-z']*[ ]?)([A-Z]?(\.){1}[ ]?)?([A-z]{1}[A-Za-z']*[ ]?)
我想你需要加上图案


似乎你的正则表达式没有考虑名字之间的空格。第六个Fluffyface上尉失败是因为你的正则表达式中没有包含数字,fawzi qaisi失败是因为你指定名字的第一个字母必须是大写…我想你最后一次抓捕也是为了[a-z]而不是a-z。是的,不考虑空格。使用在线正则表达式测试工具,使用给出的示例对正则表达式进行微调。当我将其输入代码时,它表示答案无效。抱歉:另外,我使用IntelliJ上的正则表达式测试仪来检查正则表达式。你也可以在你喜欢的IDE中添加一个插件,这非常有效!!!!!!现在,我如何让它只输出输入的第一个和姓氏,而不输出Mr或Ms和中间的首字母?对于System.out.PrintLName:+inputString;我需要改变什么才能输出Fawzi Qaisi是输入是Fawzi Qaisi先生还是Fawzi A.Qaisi?恭喜你喂了吸血鬼…为什么我的答案被否决了我能知道吗??
  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
}//