我有一个字符串数组。例如:
["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中的相似性字符串比较