为什么Matcher在Java运行时获取或提供的字符串失败?
嗨,我最近正在开发一个代码,我必须提取最后3组数字。所以我使用模式来提取数据。但我不明白。有人能帮我理解吗为什么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
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*$");