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

Java 比较两个顺序不同的字符串,java,string,compare,Java,String,Compare,我有一个字符串的形式作为 位置属性:FN、CT、ST 现在,当我计算一些函数时,我得到一个字符串 位置属性1:FN、ST、CT 现在,虽然两个字符串都表示相同的内容,如果使用以下相等函数,则返回false。我知道这两个刺痛并不相同,但语义是相同的。我该怎么办 PosAttributes.equalsPosAttributes 由于字符串由逗号分隔,因此可以使用string.split String arr[] = PosAttributes.split (","); String arr2[]

我有一个字符串的形式作为

位置属性:FN、CT、ST

现在,当我计算一些函数时,我得到一个字符串

位置属性1:FN、ST、CT

现在,虽然两个字符串都表示相同的内容,如果使用以下相等函数,则返回false。我知道这两个刺痛并不相同,但语义是相同的。我该怎么办


PosAttributes.equalsPosAttributes

由于字符串由逗号分隔,因此可以使用string.split

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

然后,您只需要在第一个数组中循环,确保所有元素都在第二个数组中。还要检查大小是否相同。

您需要将每个字符串的各个部分分开,并将它们存储在某种类型的集合中-这是一种没有顺序或顺序不影响equals方法结果的结构。我会写一个这样的方法

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

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

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));
哪个输出为真

我可能想做的是编写一个返回字符串排序数组的方法,复制所有公共功能

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的方法,该方法调用sorted和array.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;
}

我能确保一个if语句中的语义相同吗?创建一个方法来为您实现这一点。这种方法仅在字符串不能包含重复项的情况下才有效。e、 g.FN、CT、ST、FN不是有效字符串。否则该字符串将被视为等于FN,CT,ST,直到OP,无论这是否是一个问题。是的,这是正确的。听起来像是我应该在这个问题下提出的评论。谢谢@deyur。您的字符串是否可能包含重复的属性?如果是这样,那么具有不同重复值的字符串是否应被视为不同的字符串?例如,FN,ST,CT,CT等于CT,FN,ST,ST吗?
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;
}