在字符串数组中查找相似的字符串



我有一个字符串数组。例如:

["Tartrazine","Orange GGN", "Riboflavin-5-Phosphate"]

我有一个字符串。例如:

"Riboflvin"

我想在数组中查找最相似的字符串并获得它,如果它存在。所以我需要这样的输出:

"Riboflavin-5-Phosphate"

但是如果数组是这样的:

["Tartrazine","Orange GGN", "Quinoline"]

我想要这样的输出:

"No similar strings found"

我尝试使用FuzzyWuzzy库,但是它显示了很多假警报。

您可以使用String#contains方法,如果没有找到完整的字符串,则依次减少字符串的长度进行搜索:

String[] arr = {"Tartrazine", "Orange GGN", "Riboflavin-5-Phosphate"};
String element = "Riboflvin";
boolean found = false;
for (int i = 0; i < element.length(); i++) {
// take shorter substring if nothing found at previous step
String part = element.substring(0, element.length() - i);
// if any string from array contains this substring
if (Arrays.stream(arr).anyMatch(str -> str.contains(part))) {
System.out.println("Found part: " + part);
// then print these strings one by one
Arrays.stream(arr).filter(str -> str.contains(part))
.forEach(System.out::println);
found = true;
break;
}
}
// if nothing found
if (!found) {
System.out.println("No similar strings found");
}

输出:

Found part: Ribofl
Riboflavin-5-Phosphate

嗯,这取决于你到底想做什么。

有几件事你可以做,你可以检查数组是否包含一个完全匹配的String你正在寻找通过直接调用list.contains("yourStr")列表。还可以检查每个值是否包含特定的子字符串,如下所示:

foreach(String s : list) {
if (s.contains(subStr) {
return s;
}
}

否则,如果你真的想检查相似性,它就变得有点复杂了。那么我们真的需要回答这个问题:"怎样的相似才算足够相似?"我想这篇文章是对这个问题的一个体面的回答:Java中的相似性字符串比较

最新更新