比较两个顺序不同的字符串



我有一个形式的字符串

位置属性:FN、CT、ST;

现在,当我计算一些功能时,我会得到一个字符串作为

位置属性1:FN、ST、CT;

现在,尽管两个字符串都表示相同的内容,并且如果使用下面的equal函数,则返回false。我知道两种刺痛不一样,但语义是一样的。我该怎么办?

PosAttributes.equals(PosAttributes);

由于字符串由逗号分隔,您可以使用string.split来给出

String arr[] = PosAttributes.split (",");
String arr2[] = PosAttributes1.split (",");

那么您只需要遍历第一个数组,确保所有元素都在第二个数组中。还要检查尺寸是否相同。

您需要分解每个String的各个部分,并将它们存储在某种Set中——这是一种没有顺序的结构,或者顺序不会影响equals方法的结果。我会写一个这样的方法。

private static Set<String> attributeSet(String input) {
    String[] attributes = input.split(",");
    return new HashSet<String>(Arrays.asList(attributes));
}

假设分隔符是逗号,这会将字符串分成若干段。然后,它使用标准技巧将生成的数组转换为HashSet,这是Set的常用类型。

然后,当我想比较两个字符串时,我可以写一些类似的东西

if (attributeSet(string1).equals(attributeSet(string2))) {
    // ...
}

因此,假设示例文本是全文,则需要删除;字符,因为这将更改String的内容,在,字符上拆分String,对结果数组进行排序并进行比较,类似于。。。

String[] v1 = "FN,CT,ST;".replace(";", "").split(",");
String[] v2 = "FN,ST,CT;".replace(";", "").split(",");
Arrays.sort(v1);
Arrays.sort(v2);
System.out.println(Arrays.equals(v1, v2));

哪个输出true

我可能想写一个方法,返回一个String的排序数组,复制所有的公共功能。。。

public static String[] sorted(String value) {
    String[] v1 = value.replace(";", "").split(",");
    Arrays.sort(v1);
    return v1;
}

然后你可以简单地称之为,这将允许你做一个类似的比较。。。

System.out.println(Arrays.equals(sorted("FN,CT,ST;"), sorted("FN,ST,CT;")));

下一步可能是编写一个返回true的方法,该方法调用sortedArrays.equals以使其更容易。。。

System.out.println(isEqual("FN,CT,ST;", "FN,ST,CT;"));

但是,我将把这件事留给你;)

您可以重写equal方法,也可以对两个字符串进行排序,然后进行比较。

我现在在工作中也有同样的要求,希望避免使用列表进行评估。

我所做的是检查要比较的两个字符串的长度是否相等——这意味着它们可能是相同的,只是顺序不同。

现在,在比较字符串中的主字符串中逐个删除逗号分隔的字符串。如果主字符串的输出为空,则意味着这两者是精确的数学关系。请参阅下面的伪代码(我没有粘贴实际代码,因为它有一些公司特定的信息):

private static boolean isStringCombinationEqual(final String main, final String compare)
{
    boolean result = false;
    String modifiedMain = main;
    // if not the same length, then cannot possibly be same combination in different order
    if (main.length() == compare.length())
    {
        final String[] compareArr = // split compare using delimiter
        for (int i = 0; i < compareArr.length; i++)
        {
            if (i > 0)
            {
                modifiedMain = // replace delimiter with empty string
            }
            modifiedMain = // replace compareArr[0] with empty string
        }
        if (//modifiedMain is empty)
        {
            result = true;
        }
    }
    return result;
}

相关内容

  • 没有找到相关文章

最新更新