Java正则匹配代码问题:如何实现字符串精确匹配以获取预期输出
Java字符串精确匹配问题:如何实现完全匹配而非包含匹配?
没问题,我来帮你搞定这个字符串匹配的问题!先看看你的问题场景:
我在代码中遇到了问题,代码如下:
public static void main(String args[]) { String Str = new String("adminn, super, supervisor"); if(Str.matches(".*(admin).*")) { System.out.println("here we go"); }else { System.out.println("out"); } }当前代码的输出为"here we go",但我预期的输出是"out",因为我希望实现
String Str的精确匹配(即仅当Str与目标内容完全匹配时才触发对应分支)。请问是否可以通过正则表达式或其他方式实现字符串的精确匹配?
你遇到的核心问题是:原来的正则.*(admin).*是包含匹配——只要字符串里有"admin"这个子串就会匹配成功,而你需要的是精确匹配——整个字符串必须和目标内容完全一致。下面给你两种可行的解决方案:
方法1:直接用equals()方法(推荐,更高效)
如果你的目标是匹配固定的字符串,完全没必要用正则,Java的String.equals()方法就是专门用来做精确匹配的,代码修改起来也很简单:
public static void main(String args[]) { String Str = new String("adminn, super, supervisor"); // 这里替换成你要精确匹配的目标字符串,比如"admin" if(Str.equals("admin")) { System.out.println("here we go"); } else { System.out.println("out"); } }
运行这段代码就会输出out,完全符合你的预期。如果需要忽略大小写的精确匹配,可以用Str.equalsIgnoreCase("admin")。
方法2:用正则实现精确匹配
如果你一定要用正则表达式的话,只需要给正则加上边界限定符:开头的^表示字符串的起始位置,结尾的$表示字符串的结束位置,这样就能强制正则匹配整个字符串:
public static void main(String args[]) { String Str = new String("adminn, super, supervisor"); // ^admin$ 表示整个字符串必须是"admin"才会匹配 if(Str.matches("^admin$")) { System.out.println("here we go"); } else { System.out.println("out"); } }
原来的.*(admin).*会匹配任何包含"admin"的字符串,加上^和$后,只有当整个字符串恰好是"admin"时才会触发匹配,所以运行后会输出你想要的out。
内容的提问来源于stack exchange,提问作者Agung Donga
相关产品推荐
相关产品推荐

