Java 如果最后一个单词与II、III、IV、V、VI、VII、VIII、ESQ、JR、SR匹配,请将其删除到后缀中

Java 如果最后一个单词与II、III、IV、V、VI、VII、VIII、ESQ、JR、SR匹配,请将其删除到后缀中,java,regex,Java,Regex,我必须这样做:对于名字字段,如果字段由两个或多个单词组成,如果最后一个单词由以下内容之一组成,则将最后一个单词删除到后缀字段中:II、III、IV、V、VI、VII、VIII、ESQ、JR、SR。我尝试过java模式匹配,我的代码是:`String fName=“shaik II.SR String suffix=null; String [] genSuffixFname=fName.split(" "); if(genSuffixFname.length>=

我必须这样做:对于名字字段,如果字段由两个或多个单词组成,如果最后一个单词由以下内容之一组成,则将最后一个单词删除到后缀字段中:II、III、IV、V、VI、VII、VIII、ESQ、JR、SR。我尝试过java模式匹配,我的代码是:`String fName=“shaik II.SR

    String suffix=null;
    String [] genSuffixFname=fName.split(" ");


    if(genSuffixFname.length>=2){
        String line=genSuffixFname[genSuffixFname.length-1];
        String pattern="( II| III| IV| V| VI| VII| VIII| ESQ|.JR|.SR)";

        Pattern r =Pattern.compile(pattern);
        Matcher m=r.matcher(line);
        //System.out.println(m.find());
        if(m.find()){
            suffix=genSuffixFname[genSuffixFname.length-1];
        }                   
    }`

我的后缀输出为空。要进行的任何修改或我可以获得此结果的任何其他方法>

请尝试从模式中删除空格:
字符串模式=“(II | III | IV | V | VI | VII | VIII | ESQ | JR | SR)”;

尝试从模式中删除空格:
字符串模式=“(II | III | IV | V | VI | VII | VIII | ESQ | JR | SR)”;

如果要测试给定字符串是否存在于另一个字符串中,可以使用

或者使用以下代码,该代码按给定模式查找所有匹配项:

String fName = "shaik II .SR IV";
String[] genSuffixFname = fName.split("\\s+");
System.out.println(genSuffixFname.length);

if (genSuffixFname.length >= 2) {
    String line = fName; 
    String pattern = "(II)|(III)|(IV)|(V)|(VI)|"
                + "(VII)|(VIII)|(ESQ)|(.JR)|(.SR)";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(line); 
    while (m.find()) {
        System.out.println(m.group());
    }
}`

有关Java中正则表达式的更多信息:

如果要测试给定字符串是否存在于另一个字符串中,可以使用

或者使用以下代码,该代码按给定模式查找所有匹配项:

String fName = "shaik II .SR IV";
String[] genSuffixFname = fName.split("\\s+");
System.out.println(genSuffixFname.length);

if (genSuffixFname.length >= 2) {
    String line = fName; 
    String pattern = "(II)|(III)|(IV)|(V)|(VI)|"
                + "(VII)|(VIII)|(ESQ)|(.JR)|(.SR)";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(line); 
    while (m.find()) {
        System.out.println(m.group());
    }
}`

有关Java中正则表达式的更多信息:

当我运行此代码段时,我得到
suffix=“.SR“
。这不是预期的输出吗?如果我给II或III作为后缀,它不起作用,我得到的是空值,它的作用虽然为>JR或.SR。我希望所有的II | III | IV | V | VI | VIII | VIII | ESQ | JR | SRi认为` II | III | IV | V | VI | VIII | ESQ `前面有一个空格。这就是它不匹配的原因。行可能包含这个,没有空格。这是正确的Muhammad imran,它现在可以工作了,感谢上面的代码变量,行我想要作为一个正则表达式?有没有可能,因为现在它只是做最后的决定。我想匹配全名中的任何位置。当我运行此代码段时,我得到
suffix=“.SR”
。这不是预期的输出吗?如果我给II或III作为后缀,它不起作用,我得到的是空值,它的作用虽然为>JR或.SR。我希望所有的II | III | IV | V | VI | VIII | VIII | ESQ | JR | SRi认为` II | III | IV | V | VI | VIII | ESQ `前面有一个空格。这就是它不匹配的原因。行可能包含这个,没有空格。这是正确的Muhammad imran,它现在可以工作了,感谢上面的代码变量,行我想要作为一个正则表达式?有没有可能,因为现在它只是做最后的决定。我想匹配全名中的任何位置。在上面的代码变量中,我想作为正则表达式的行?有没有可能,因为现在它只是做最后的决定。我想匹配全名中的任何位置。你是指带有拆分的行吗?要在空白处拆分,应使用
fName.split(\\s”)用于在一个空格上拆分。用于拆分多个空格
fName.split(\\s+)。。如果这不是你问题的答案,请再次提问:)不,我的意思是String line=genSuffixFname[genSuffixFname.length-1]。仅当它最后出现时才匹配,但我希望它匹配全名中的任何位置?有没有可能,因为现在它只是做最后的决定。我想匹配全名中的任何位置。你是指带有拆分的行吗?要在空白处拆分,应使用
fName.split(\\s”)用于在一个空格上拆分。用于拆分多个空格
fName.split(\\s+)。。如果这不是你问题的答案,请再次提问:)不,我的意思是String line=genSuffixFname[genSuffixFname.length-1]。只有当它最后出现时才会匹配,但我希望它匹配全名中的任何位置。