我使用.equals方法在ArrayList中搜索String,但是用户必须编写String的确切名称。有没有办法显示匹配包含的用户输入的字符串? 例如,如果您搜索“Djang'你想要找到的字符串是' Django'。
答案 0 :(得分:3)
您应该查看Levenshtein Distance。它测量字符串与另一个字符串的距离。甚至有a Java implementation in Wikibooks。
然后,这是一个排序和找到最小值的问题。
list.stream()
.sort(Comparator.comparing(
s -> LevenshteinDistance.computeLevenshteinDistance(s, input))
.findFirst();
从那里,也可以过滤以在可接受的距离上添加上限,以防止所有输入返回结果。
list.stream()
.sort(Comparator.comparing(
s -> LevenshteinDistance.computeLevenshteinDistance(s, input))
.filter(s -> LevenshteinDistance.computeLevenshteinDistance(s, input) < limit)
.findFirst();
答案 1 :(得分:0)
public boolean contains(CharSequence s)当且仅当if时返回true 该字符串包含指定的char值序列。
参数: s - 要搜索的序列
返回: 如果此字符串包含s,则返回true,否则返回false
抛出: NullPointerException - 如果s为null
自: 1.5
例如:
String myString = "Django"
public boolean stringCatcher(String userInput) {
return myString.contains(userInput);
}
然后将Djang
传递给stringCatcher()
会导致返回true
值。