当前位置: 首页 > 面试题库 >

Java字符串搜索忽略重音符号

曹沛
2023-03-14
问题内容

我正在尝试为我的应用程序编写一个过滤器函数,该函数将采用输入字符串并以某种方式过滤掉与给定输入不匹配的所有对象。最简单的方法是使用String的contains方法,即仅检查对象(对象中的String变量)是否包含在过滤器中指定的字符串,但这不会考虑重音。

所讨论的对象基本上是Person,而我要匹配的字符串是名称。因此,例如,如果有人搜索Joao,我希望Joáo会包含在结果集中。我已经在我的应用程序中使用了Collat​​or类来按名称进行排序,并且它可以进行比较,因为它可以进行比较,因此效果很好,即使用UK
Localeá位于b之前但位于a之后。但是很明显,如果比较a和á,则它们不会返回0,因为它们不相等。

那么,有谁知道我将如何做到这一点?


问题答案:

利用java.text.Normalizer正则表达式摆脱变音符号。

public static String removeDiacriticalMarks(String string) {
    return Normalizer.normalize(string, Form.NFD)
        .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}

您可以如下使用:

String value = "Joáo";
String comparisonMaterial = removeDiacriticalMarks(value); // Joao


 类似资料:
  • 问题内容: 问题很简单。JAVA中是否有任何函数可以比较两个字符串并在忽略重音字符的情况下返回true? 即 回报相等。 谢谢 问题答案: 我认为您应该使用Collat​​or类。它允许您设置强度和区域设置,并将适当地比较字符。 从Java 1.6 API中: 您可以设置“整理器”的“强度”属性来确定在比较中被视为重要的差异水平。提供了四个优势:主要,次要,高等教育和同等优势。语言功能的优势确切分

  • 问题 你需要以忽略大小写的方式搜索与替换文本字符串 解决方案 为了在文本操作时忽略大小写,你需要在使用 re 模块的时候给这些操作提供 re.IGNORECASE 标志参数。比如: >>> text = 'UPPER PYTHON, lower python, Mixed Python' >>> re.findall('python', text, flags=re.IGNORECASE) ['P

  • 要求是访问汉堡服务https://meals.food.com/burger2.应用程序内的上下文路径是。 进入 检查入口控制器日志后: [2022年1月5日:13:54:11 0000]“GET//HTTP/1.1”304 0“-”Mozilla/5.0(X11;Linux x86\u 64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/96.0.4664.110

  • 问题内容: 我在页面上添加了一个简单的排序。这个想法是搜索产品。这些产品是用西班牙语编写的,带有口音。例如:“Jamón”。 这是我的代码: 我唯一的问题是您必须输入“Jamón”才能找到产品“Jamón”。我想要的是更加灵活,如果用户键入“ Jamon”,则结果必须包含“Jamón”。 如何使用角度过滤器进行搜索而忘记重音符号?任何想法? 提前致谢。 问题答案: 您需要创建一个过滤器功能(或完整

  • 使用Umbraco v6,检查搜索(不是完整的Lucene查询)。这是一个拉丁/南美洲网站。我问过我的同事,他们如何在搜索/URL中键入标题(字母上的重音符号),他们都说他们没有,他们只使用“常规”字符(a-Z,a-Z)。 我知道在传递到Examine时如何从字符串中去掉特殊字符,但我需要另一种方法,如Examine从属性中删除特殊字符以匹配查询。我有许多“节点”的名称中有标题(这是我正在搜索的属

  • 本文向大家介绍在Java中搜索字符串中的字符。,包括了在Java中搜索字符串中的字符。的使用技巧和注意事项,需要的朋友参考一下 您可以使用String类的方法在字符串中搜索特定字母。此方法返回字符串中单词的位置索引(如果找到)。否则返回-1。 示例 输出结果