即使格式不匹配,我想搜索字符串例如 “Apple”是我试图搜索的字符串,但我输入“apple”或“pppple”或“Applé”。我想检查我输入的每个字符, 如果它与我想要搜索的字符串不匹配,它将替换它,直到我得到字符串“Apple”。
答案 0 :(得分:2)
您可能对以下代码感兴趣,该代码使用java.text.Normalizer
在较大的规范化字符串中查找规范化字符串:
此类提供方法
normalize
,它将Unicode文本转换为等效的组合或分解形式,从而可以更轻松地对文本进行排序和搜索。normalize
方法支持Unicode Standard Annex #15 — Unicode Normalization Forms中描述的标准规范化表单。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.text.Normalizer;
class Ideone
{
public static void main(String[] args) {
String haystack[] = {"Apple","Apple","Apple"}; // sample input strings
String needle[] = {"ápple", "apple", "Applé"}; // sample keywords
for (int i = 0; i < haystack.length; i++) { // loop through inputs
System.out.println(
find(
normalize(haystack[i]), // get the normalized form of input
normalize(needle[i]) // get the normalized form of the keyword
)
);
}
}
public static String normalize(String s) { // Get the string without diacritics
return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");
}
// Checks if a string contains another in a case-insensitive way
public static boolean find(String haystack, String needle) {
Pattern p = Pattern.compile(needle, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(haystack);
if (m.find()) {
return true;
} else {
return false;
}
}
}
答案 1 :(得分:1)
你的问题并不完全清楚,但听起来你可能正试图计算两个弦之间的Levenshtein距离。如果你对这个术语进行一些研究,应该清楚这是否是你需要的。
简而言之:
Levenshtein距离是将“pppple”转换为“Apple”所需的删除,插入或替换的数量。