0

我想存储一个标准化版本的 aString以便能够对其进行like 'xxxx%'搜索。

我正在寻找一种对用户搜索高效且友好的好方法。

我最初的想法是转换为小写,删除非字母字符、重音符号和多余的空格,但不知道是否有一个好的已经研究和实施并准备好了。

PD:字符串将包含位置名称。

4

2 回答 2

1

最后,我以自定义解决方案结束。它可能更有效,但对我来说表现良好:

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);
}
于 2013-01-31T22:46:49.590 回答
0

您可以使用搜索 API 吗?它默认提供文本规范化,并设计用于最终用户查询(即,如果您正确使用索引/命名空间,您可以将用户查询传递到搜索 API 而无需验证)。

于 2013-01-30T00:27:44.320 回答