我有一个字符串形式为比较两个不同顺序的字符串
PosAttributes:FN,CT,ST;
现在,当我计算的一些功能我得到一个字符串作为
PosAttributes1:FN,ST,CT;
现在虽然两个字符串都表示相同的事情,并且如果使用下面的相同函数,它将返回false。我知道两种叮咬都不一样,但语义是相同的。我该怎么办?
PosAttributes.equals(PosAttributes);
我有一个字符串形式为比较两个不同顺序的字符串
PosAttributes:FN,CT,ST;
现在,当我计算的一些功能我得到一个字符串作为
PosAttributes1:FN,ST,CT;
现在虽然两个字符串都表示相同的事情,并且如果使用下面的相同函数,它将返回false。我知道两种叮咬都不一样,但语义是相同的。我该怎么办?
PosAttributes.equals(PosAttributes);
由于字符串由逗号delimitered您可以使用String.split给
String arr[] = PosAttributes.split (",");
String arr2[] = PosAttributes1.split (",");
那么你只要通过第一阵列,确保所有的元素都是第二阵列中需要循环。还要检查尺寸是否相同。
我可以确保只有一个if语句中的语义相同吗? –
@UditPanchal我怀疑它,不是如果你想要它可读 – MadProgrammer
创建一个方法,为你做到这一点。 – deyur
您需要分解每个字符串的各个部分,并将它们存储在某种Set中 - 这是一种结构,其中无任何订单,或订单不影响方法的结果。我会写一个像这样的方法。
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))) {
// ...
}
这种方法仅适用于字符串不能包含重复项的情况。例如“FN,CT,ST,FN”不是有效的字符串。否则,该字符串将被视为等于“FN,CT,ST”。直到OP是否这是一个问题。 – deyur
是的,的确如此。听起来像是我应该在问题下提出的评论。谢谢@deyur。 –
所以假设例如文本全文,你需要删除;
字符,因为这会改变内容在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
的方法,即要求sorted
和Arrays.equals
,使其更容易...
System.out.println(isEqual("FN,CT,ST;", "FN,ST,CT;"));
不过,我会离开,你;)
您可以覆盖等方法或排序都串,然后对它们进行比较。
我现在有相同的工作要求,并希望避免使用列表进行评估。
我所做的是检查两个要比较的字符串长度是否相等 - 这意味着它们可能是相同的,只是顺序不同而已。
现在在主字符串中逐个删除逗号分隔的字符串,该字符串位于比较字符串中。如果主字符串的输出是空的,这意味着两者是精确的数学。请参阅下面的伪代码(我没有粘贴实际的代码,因为它有一些公司特定的信息):
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;
}
是否有可能您的字符串将包含重复的属性?如果是这样,那么具有不同重复值的字符串是否应该被视为不同?例如,“FN,ST,CT,CT”等于“CT,FN,ST,ST”吗? –