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

时间:2015-04-07 02:47:48

标签: java string compare

我有一个表格的字符串

PosAttributes:FN,CT,ST;

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

PosAttributes1:FN,ST,CT;

现在虽然两个字符串都表示相同的内容,并且如果使用后面的相同函数,则返回false。我知道两个叮咬都不一样,但语义是一样的。我该怎么办?

PosAttributes.equals(PosAttributes);

5 个答案:

答案 0 :(得分:0)

由于字符串由逗号分隔,您可以使用String.split来提供

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

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

答案 1 :(得分:0)

你需要打破每个字符串的各个部分,并将它们存储在某种Set - 那个结构中,其中没有订单,或者订单没有影响equals方法的结果。我写了这样的方法。

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

假设分隔符是逗号,这会将String分成其段。然后,它使用标准技巧将结果数组转换为HashSet,这是常用的Set类型。

然后,当我想比较两个字符串时,我可以编写类似

的内容
if (attributeSet(string1).equals(attributeSet(string2))) {
    // ...
}

答案 2 :(得分:0)

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

,

哪个输出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;"))); 的方法,该方法调用truesorted以使其更容易...

Arrays.equals

但是,我会把它留给你;)

答案 3 :(得分:0)

您可以覆盖等于方法或对两个字符串进行排序,然后比较它们。

答案 4 :(得分:0)

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

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

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

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;
}