Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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
为什么Matcher在Java运行时获取或提供的字符串失败?_Java_Regex_String_Pattern Matching_Matcher - Fatal编程技术网

为什么Matcher在Java运行时获取或提供的字符串失败?

为什么Matcher在Java运行时获取或提供的字符串失败?,java,regex,string,pattern-matching,matcher,Java,Regex,String,Pattern Matching,Matcher,嗨,我最近正在开发一个代码,我必须提取最后3组数字。所以我使用模式来提取数据。但我不明白。有人能帮我理解吗 String str ="EGLA 0F 020"; String def = "ALT 1F 001 TO ALT 1F 029"; String arr[] = def.split("TO"); String str2 = arr[0]; System.out.println("str2:"+str2); Pattern pt = Pat

嗨,我最近正在开发一个代码,我必须提取最后3组数字。所以我使用模式来提取数据。但我不明白。有人能帮我理解吗

    String str ="EGLA 0F 020";
    String def = "ALT 1F 001 TO ALT 1F 029";
    String arr[] = def.split("TO");
    String str2 = arr[0];
    System.out.println("str2:"+str2);
    Pattern pt = Pattern.compile("[0-9][0-9][0-9]$");
    Matcher m1 = pt.matcher(str);
    Matcher m2 = pt.matcher(str2);
    boolean flag = m1.find();
    boolean flag2 = m2.find();
    if(flag)
        System.out.println("first match:::"+m1.group(0));
    else 
        System.out.println("Not found");
    if(flag2)
        System.out.println("first match:::"+m2.group(0));
    else
        System.out.println("Not found");
为上述代码生成的输出如下所示:

    str2:ALT 1F 001 
    first match:::020
    Not found

请回复我被困在这里

这是因为分割时有一个尾随空格

String str = "EGLA 0F 020";
String str2 = "ALT 1F 001 ";
//                       ^ trailing space
你可以用多种方法来修复它。例如:

  • 通过将
    “拆分为”
  • 修剪结果
  • 在正则表达式中允许尾随空格
例如,此更改将起作用:

String arr[] = def.split(" TO ");

如果您注意到拆分仅对字母
“至”
“生效,则表示str2模式为
“ALT 1F 001”

若要解决此问题,您可以尝试在
“\s*到\s*”
而不是
“到”
上拆分,以便也删除要删除的工作周围的任何空间。另一种解决方案是将模式
“[0-9][0-9][0-9]$”
替换为
“[0-9][0-9][0-9]”
,而不使用最后的
$
,这样它就可以接受字符串上的结尾空格。

尝试以下模式:

Pattern pattern = Pattern.compile("[0-9][0-9][0-9]\\s*$"); 

Pattern pattern = Pattern.compile("[0-9]{3}\\s*$");