我想存储一个标准化版本的 aString
以便能够对其进行like 'xxxx%'
搜索。
我正在寻找一种对用户搜索高效且友好的好方法。
我最初的想法是转换为小写,删除非字母字符、重音符号和多余的空格,但不知道是否有一个好的已经研究和实施并准备好了。
PD:字符串将包含位置名称。
我想存储一个标准化版本的 aString
以便能够对其进行like 'xxxx%'
搜索。
我正在寻找一种对用户搜索高效且友好的好方法。
我最初的想法是转换为小写,删除非字母字符、重音符号和多余的空格,但不知道是否有一个好的已经研究和实施并准备好了。
PD:字符串将包含位置名称。
最后,我以自定义解决方案结束。它可能更有效,但对我来说表现良好:
public static normalize(String string) {
string = string.toLowerCase();
//Remove/change all special characters --> àaç is converted to aac
String temp = Normalizer.normalize(string, Normalizer.Form.NFD);
string = pattern.matcher(temp).replaceAll("");
//Remove extra spaces
string = StringUtils.normalizeSpace(string);
}
来自Commons LangStringUtils.normalizeSpace
。如果您不想引入依赖关系,您可以轻松地从函数中获取代码:
private static final Pattern WHITESPACE_PATTERN = Pattern.compile("(?: \\s|[\\s&&[^ ]])\\s*");
public static String normalizeSpace(final String str) {
if (str == null) {
return null;
}
return WHITESPACE_PATTERN.matcher(trim(str)).replaceAll(SPACE);
}
您可以使用搜索 API 吗?它默认提供文本规范化,并设计用于最终用户查询(即,如果您正确使用索引/命名空间,您可以将用户查询传递到搜索 API 而无需验证)。