我有两个字符串,看起来像这样:
String str1 = "[0.7419,0.7710,0.2487]";
String str2 = "[\"0.7710\",\"0.7419\",\"0.2487\"]";
我想比较它们,尽管顺序不同,但它们是相等的。。。
哪种方法最快最简单?
我是否应该将每个数组拆分为数组并比较这两个数组?还是不?我想我必须删除“[”,“]”,“”字符以使它更清楚,所以我做了。我还把“,”换成了“,”但我不知道这是否有帮助。。。
提前感谢:)
编辑:我的字符串不总是一组双精度或浮点值。它们也可以是实际的单词或一组字符。
5条答案
按热度按时间bvk5enib1#
对于使用hashset的用户来说,这是一个非常简单的解决方案。
的好处set:-
它不能包含重复项。
元素的插入/删除是o(1)。
比数组快得多。这里保持元素的顺序也不重要,所以没关系。
输出:
q5lcpyga2#
因为您有一个混合结果类型,所以首先需要将其作为混合输入进行处理
下面是我将如何替换它,特别是对于较长的字符串。
接下来,我们有了一个字符串流,需要将其解析为原语或字符串(因为我假设我们没有某种奇怪的对象序列化形式):
使用此方法,我们可以将混合流转换为混合集合:
最后,一些健全性检查的一个例子是确保输入字符串上有适当的大括号等
{a, b, ...c}
,以及序列/列表语法[a, b, ...c]
,两者在这里有不同的比较。ufj5ltwl3#
这样地:
或者您可以使用功能齐全的方法(效率可能稍低一些):
使用数组比使用集合(如其他人所建议的)的优点是,数组通常使用较少的内存,并且它们可以保存重复项。如果问题域的每个字符串中都包含重复的元素,则不能使用集合。
nvbavucw4#
这可以通过下面的一个方法来实现,这个方法使用treeset来实现一组字符串,这样排序就可以内置句柄。它只是一个简单的转换都在字符串的集合和比较使用等于方法。请尝试以下代码:
在上面的代码中,我借助jsonarray删除了“\”字符。
注:
但如果一个字符串中的重复元素和另一个字符串中的重复元素在数量上不同,这将不起作用,因为set不保留重复元素。
尝试使用保留重复元素的列表并解决您的问题。
93ze6v8z5#
googlegson可以非常巧妙地处理这个任务,将值作为
Set<String>
:输出为: