gpt4 book ai didi

Java:比较具有不同顺序的关键字的字符串

转载 作者:行者123 更新时间:2023-12-05 04:09:24 24 4
gpt4 key购买 nike

我有两个字符串,如下所示:

String str1 = "[0.7419,0.7710,0.2487]";
String str2 = "[\"0.7710\",\"0.7419\",\"0.2487\"]";

我想比较它们,尽管顺序不同,但它们是相等的......

哪种方法最快最简单?

我是否应该将每个拆分成数组并比较这两个数组?或不?我想我必须删除“[”,“]”,“””字符以使其更清晰,所以我这样做了。我也用“”替换了“,”但我不知道这是否有帮助......

提前致谢:)

编辑:我的字符串不会总是一组 double 或 float 。它们也可能是实际的单词或一组字符。

最佳答案

因为你有一个混合的结果类型,你需要先把它作为一个混合输入来处理

以下是我将如何替换它,尤其是对于较长的字符串。

private Stream<String> parseStream(String in) {
//we'll skip regex for now and can simply hard-fail bad input later
//you can also do some sanity checks outside this method
return Arrays.stream(in.substring(1, in.length() - 1).split(",")) //remove braces
.map(s -> !s.startsWith("\"") ? s : s.substring(1, s.length() - 1)); //remove quotes
}

接下来,我们现在有一个字符串流,需要将其解析为原始类型或字符串(因为我假设我们没有某种奇怪的对象序列化形式):

private Object parse(String in) {
//attempt to parse as number first. Any number can be parsed as a double/long
try {
return in.contains(".") ? Double.parseDouble(in) : Long.parseLong(in);
} catch (NumberFormatException ex) {
//it's not a number, so it's either a boolean or unparseable
Boolean b = Boolean.parseBoolean(in); //if not a boolean, #parseBoolean is false
b = in.toLowerCase().equals("false") && !b ? b : null; //so we map non-false to null
return b != null ? b : in; //return either the non-null boolean or the string
}
}

使用它,我们可以将混合流转换为混合集合:

Set<Object> objs = this.parseStream(str1).map(this::parse).collect(Collectors.toSet());
Set<Object> comp = this.parseStream(str2).map(this::parse).collect(Collectors.toSet());
//we're using sets, keep in mind the nature of different collections and how they compare their elements here
if (objs.equals(comp)) {
//we have a matching set
}

最后,一些健全性检查的一个例子是确保输入字符串上有适当的大括号等。尽管其他人怎么说,我还是将集合语法学习为 {a, b, ...c} ,以及series/list语法为[a, b, ...c],两者在这里有不同的比较。

关于Java:比较具有不同顺序的关键字的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com