【问题标题】:What is an alternative to comparing two string with regex将两个字符串与正则表达式进行比较的替代方法是什么
【发布时间】:2020-01-19 18:33:48
【问题描述】:

我想比较两个字符串,它们之间有不同的分隔符。

例子

String s1 = "ZZ E5 - Pirates of carribean";
String s2 = "ZZ E5 : Pirates of carribean"; 

我想比较两个字符串是否相等。

我已经尝试在 Java 中使用正则表达式来解决这个问题,

        String pattern = "(.*)[:-](.*)";
        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(s1);
        Matcher m1 = r.matcher(s2);

        if (m1.find()&&m.find()) {
            System.out.println("Found value: " + m.group(1));
            System.out.println("Found value: " + m.group(2));
            System.out.println("Found value: " + m1.group(1));
            System.out.println("Found value: " + m1.group(2));

            System.out.println(m.group(1).contentEquals(m1.group(1)));
            System.out.println(m.group(2).contentEquals(m1.group(2)));
        } else {
            System.out.println("NO MATCH");
        }

这是一个好方法还是我们可以通过其他有效的方式来做到这一点?

【问题讨论】:

  • 在正则表达式中,您必须编译它 1 次,并根据需要多次使用它。我更喜欢正则表达式而不是字符串方法。但是正则表达式也是魔鬼。因此,如果性能不是问题,请使用字符串方法。或在使用正则表达式时采取额外的预防措施。
  • 我想知道当电影的标题像"Star Wars: Episode IV - A New Hope"这样时会有什么期望。

标签: java regex string


【解决方案1】:

您可以使用 String.split() 和正则表达式 OR 运算符(如果您已经知道所有可能的分隔符)并比较数组。

import java.utils.Arrays;

String pattern = "-|:";
if (Arrays.equals(s1.split(pattern), (s2.split(pattern)))) {
    System.out.println("Match");
} else {
    System.out.println("No match");
}

编辑为使用Arrays.equals

【讨论】:

  • split 返回一个数组,而数组没有实现equals,所以这永远是假的。
  • 我的错,应该使用Arrays.equals()。更新了我的答案
【解决方案2】:

您可以通过选择其中一个分隔符作为规范,将两个字符串转换为规范形式,例如:

String s1 = "ZZ E5 - Pirates of carribean";
String s2 = "ZZ E5 : Pirates of carribean";

String canonicalS1 = s1.replaceAll("-", ":");
String canonicalS2 = s2.replaceAll("-", ":");

System.out.println(canonicalS1.equals(canonicalS2));

输出

true

请注意,此解决方案希望分隔符只出现一次,或者就此而言,分隔符是可互换的。

【讨论】:

  • 由于您没有使用正则表达式,您也可以只使用String.replace()。这将取代所有这些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多