Java。 比较字符串时忽略重音

问题很简单。 JAVA中是否有任何函数可以比较两个字符串并忽略重音字符而返回true?

String x = "Joao";

String y = "João";

回报相等。

谢谢

framara asked 2019-12-26T16:24:21Z

6个解决方案

65 votes

我认为您应该使用Collator类。 它允许您设置强度和区域设置,并将适当地比较字符。

从Java 1.6 API中:

您可以设置整理器的强度   属性确定水平   差异被认为在   比较。 四个优势是   提供:主要,次要,   大专和同等学历。 最正确   语言的优势分配   功能取决于语言环境。 对于   例如,在捷克语中,“ e”和“ f”是   被认为是主要差异,而   “ e”和“ě”是次要区别,   “ e”和“ E”是三级差异   和“ e”和“ e”相同。

我认为这里的重点(人们正在努力做到的)是,“ Joao”和“João”永远不应被视为相等,但是,如果要进行排序,则不希望基于ASCII值对它们进行比较 因为那样您会遇到Joao,John,João之类的东西,这是不好的。 使用collator类肯定可以正确处理此问题。

DaveJohnston answered 2019-12-26T16:24:57Z

24 votes

您没有从我这里听到这个消息(因为我不同意问题的前提),但是,您可以使用java.text.Normalizer,并使用NFD对其进行规范化:这将重音与其附加的字母分开。 然后,您可以过滤重音字符并进行比较。

Chris Jester-Young answered 2019-12-26T16:25:18Z

7 votes

如果将其配置为忽略变音符号,则整理器将为a和á返回0:

public boolean isSame(String a, String b) {

Collator insenstiveStringComparator = Collator.getInstance();

insenstiveStringComparator.setStrength(Collator.PRIMARY);

return insenstiveStringComparator.compare(a, b) == 0;

}

isSame(“ a”,“á”)得出true

Benny Bottema answered 2019-12-26T16:25:44Z

6 votes

如果要比较/排序忽略重音符号,请使用apache StringUtils库中的stripAccents:

public int compareStripAccent(String a, String b) {

return StringUtils.stripAccents(a).compareTo(StringUtils.stripAccents(b));

}

Daniel answered 2019-12-26T16:26:03Z

1 votes

public boolean insenstiveStringComparator (String a, String b) {

java.text.Collator collate = java.text.Collator.getInstance();

collate.setStrength(java.text.Collator.PRIMARY);

collate.setDecomposition(java.text.Collator.CANONICAL_DECOMPOSITION);

return collate.equals(a, b);

}

-1 votes

这类转换的问题在于,从重音字符到非重音字符的映射始终不清晰。 它取决于代码页,本地化等。例如,此a的重音等同于“ a”吗? 对于人类而言这不是问题,但对于计算机而言则是棘手的。

AFAIK Java没有可以查询当前本地化选项并进行此类转换的内置转换。 您可能需要一些可以更好地处理unicode的外部库,例如ICU([http://site.icu-project.org/])

Uri answered 2019-12-26T16:26:44Z

java忽略转移i字符_Java。 比较字符串时忽略重音相关推荐

  1. java replace 忽略大小写_java替换字符串时忽略大小写

    替换字符串大家都用的很熟悉了,但是估计日常很少用到替换时忽略大小写,今天问了身边几个工作超10年的java程序员,竟然大家都不知道怎么写了,这种基础代码竟然都淡忘了.正好学习整理一下,在这里也分享备忘 ...

  2. java中全大写字符_Java 大写字符串中的字符

    public class ComputeInitials { public static void main(String[] args) {/**时 代 J a v a 公 众 号 - nowjav ...

  3. java string的某个字符_JAVA如何提取String中字符串的某个字符 具体内容

    今天小编和大家分享JAVA如何提取String中字符串的某个字符,希望对大家有所帮助. 工具/材料 PC 操作方法 01 java中提取特定字符前的字符串: String str = "房估 ...

  4. java 按符号分割字符串_如何根据java根据指定的字符,分割字符串?

    展开全部 根据java根据指定的字符,分割字符串的方法是:e69da5e887aa62616964757a686964616f31333365633866String temp[]=result.sp ...

  5. java遍历字符串字符_Java 遍历字符串中所有字符的最快方法

    小编典典 在我的AMDx64 8core和源1.8上,使用'charAt'和字段访问之间没有区别.看来jvm已经过充分优化,可以内联和精简任何'string.charAt(n)'调用. 这完全取决于S ...

  6. java字符串去掉最后一个逗号_java拼接字符串时去掉最后一个多余逗号的方法

    java拼接字符串时去掉最后一个多余逗号的方法 本文实例讲述了java拼接字符串时去掉最后一个多余逗号的方法.分享给大家供大家参考.具体分析如下: 先看下面这段代码: for (int t = 0; ...

  7. java string 去掉某个字符_JAVA String 如何去掉指定字符

    展开全部 i.replace方法 该方法的作用是替换字符串中所有指定的字e69da5e6ba9062616964757a686964616f31333337616637符,然后生成一个新的字符串.经过 ...

  8. java string 连续字符_Java中字符串中连续相同字符去重方法

    导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...

  9. java 截取两个字符之间的字符串_java里面如何截取两个关键字中间的字符串?

    展开全部 1.split()+正则表达式来进行截取. 将正则传入62616964757a686964616fe58685e5aeb931333365633839split().返回的是一个字符串数组类 ...

最新文章

  1. java 创建 HMAC 签名
  2. 网络工程学习资料2---IEEE 802 标准集合
  3. Maven快照机制(SNAPSHOT)
  4. HTTP_REFERER的获取情况
  5. matlab拟合工具箱cftool
  6. Java多线程使用场景
  7. spring mvc学习(39):restful的crud实现删除方式
  8. 这些工具类用起来真的很”香“
  9. vb里面计算误差咱们解决_盘点3dmax渲染出来是黑色的6个原因及解决方法
  10. idea java文件显示j_IDEA 快捷使用指南
  11. console.log()注意事项。
  12. 「开源资讯」Apache Storm 2.2.0 发布,分布式实时计算
  13. 腾讯云TDSQL TCP干货
  14. uniapp对接ucharts图表
  15. Win10任务栏100%透明怎么设置?Win10任务栏100%透明设置教程
  16. 什么是粘包?socket 中造成粘包的原因是什么? 粘包的处理方式
  17. 微信企业号开发和配置
  18. 如何测算BMI指数(Python)
  19. 计算机组成原理(4)IO
  20. ROS TF2 中的 四元数 基础部分

热门文章

  1. The 10 Most Important Linux Commands/10个最经常使用的命令行
  2. Linux中的buff/cache内存
  3. Linux利用Esmtp 选择邮件服务器发送邮件(解决手机接收乱码)
  4. 详解created和mounted区别与使用场景
  5. int bool str (索引,切片) for 循环
  6. 模块一 day05 数据类型(上)
  7. Vue - Ant Design Vue 中 <a-select> 选择器组件,既可从下拉列表选择,又可输入手动输入文本(既可下拉选择又可自己输入)
  8. 经典好玩的休闲游戏大合集,免费玩
  9. 双网卡teamviewer linux,钉钉远程打卡2019实践录
  10. 计算机核心期刊排名及投稿经验