如何在Java中检测适当的String语言环境

时间:2015-11-27 17:08:35

标签: java unicode locale

在当前项目中,我需要小写传入的文本,可以用英语/德语/土耳其语传递。普通String#toLowerCase()对于土耳其语字母表的某些字符失败,因为例如,有必要将非ASCII字符http://sense.qbox.io/gist/44adf2c2ade8abd6758f0e08ed2e40434850fc1c映射到ASCII http://unicode-table.com/en/0130/。 Java 7处理此映射时没有任何问题,以防我提供语言环境,即。 str.toLowerCase(new Locale(“tr”))是必要的。但是这种情况看起来我应该检测给定文本的适当区域设置,因为它可以用三种可能的语言之一来编写。

有没有办法执行适当的区域设置检测,或者这是错误的?

编辑1

我没有提到实际用例,我正在通过REST API向实体添加标签,我想我不允许更改API合同。

2 个答案:

答案 0 :(得分:1)

有些库使用启发式方法以一定的概率检测语言。可以找到一个示例here

答案 1 :(得分:1)

可能有一个库可以做到这一点,但我不知道这样的库。但是,我可以为您提供一个简单的解决方案。

土耳其语和德语有几个特殊字符。所有其他字符都是普通英语,因此问题与它们无关。因此,您可以保存特殊的德语和土耳其语字符列表,并通过在字符串中搜索这些字符来检测当前字符串的语言环境。如果在字符串中找到一个土耳其字符,则认为它是在土耳其语语言环境中处理的,德语也是如此。如果找不到任何一个特殊字符,请使用默认语言环境。

此解决方案会有一些性能损失,因为您要扫描两次字符串,但这对大多数应用程序来说并不重要。