用正则表达式比较两个字符串的替代方法是什么

Mav*_*ick 1 java regex string

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

例子

String s1 = "ZZ E5 - Pirates of carribean";
String s2 = "ZZ E5 : Pirates of carribean"; 
Run Code Online (Sandbox Code Playgroud)

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

我试过在 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");
        }
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ejo 5

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

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));
Run Code Online (Sandbox Code Playgroud)

输出

true
Run Code Online (Sandbox Code Playgroud)

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