将Java字符串转换为ASCII

24

我需要将由某些特定语言的字母组成的字符串(例如HÄSTDJUR-注意Ä)转换为不带有这些特殊字母的字符串(在这种情况下是HASTDJUR)。要如何在Java中实现?谢谢!


重点并不在于它听起来怎么样。场景如下-您想使用应用程序,但没有瑞典键盘。因此,您可以通过用拉丁字母表中的典型字母替换特殊字母而不是查看字符映射来输入它。


1
HASTDJUR?德国人会期望HAESTDJUR。你似乎假设了一些特定的规则,能否明确说明一下? - MSalters
2
以下是一些让您思考的案例:IJ => IJ ? Æ => AE ? DŽ => DZ ? ß => ss ? Ʀ => R ? ð => ? Δ => D ? - MSalters
1
@MSalters 一旦你在某个地方看到Haemaelaeinen这个词,你就不想再把ä转换成ae了... - Carlos
好的,这是瑞典语,我知道该期望什么 :) - grem
2个回答

62

我认为你的问题与这个问题相同:

Java - 去除重音并将其转换为常规字母

因此答案也是相同的:

解决方案

String convertedString = 
       Normalizer
           .normalize(input, Normalizer.Form.NFD)
           .replaceAll("[^\\p{ASCII}]", "");

参考资料

请参阅:

示例代码:

final String input = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ";
System.out.println(
    Normalizer
        .normalize(input, Normalizer.Form.NFD)
        .replaceAll("[^\\p{ASCII}]", "")
);

输出:

这是一个很酷的字符串


seanizer - 我需要测试一下,但看起来这好像是解决方案。 - grem
1
这似乎不能很好地处理复合字符(Æ,Œ)。 - Weckar E.
@WeckarE。对于连字,需要进行额外的步骤,具体步骤在此处概述:https://lexsrv3.nlm.nih.gov/LexSysGroup/Projects/lvg/2013/docs/designDoc/UDF/unicode/NormOperations/splitLigatures.html(页面底部)。 - Sean Patrick Floyd

1
我建议将特殊字符映射到您想要的字符。
Ä --> A
é --> e
A --> A (exactly the same)
etc...

然后你可以在你的文本上调用你的映射(伪代码):

for letter in string:
   newString += map(letter)

实际上,您需要创建一组规则,将字符映射到ASCII等效字符。


2
谁说过什么关于“听起来像”的事情?这个问题似乎只是关于去除字母上的装饰,说得粗俗点。 - Noel M
你会如何创建这样的表格,以及如何有效地使用它? - MSalters
@MSalters:那是另一个问题。我想可以用一些预定义的规则来完成。 - Adeel Ansari
@MSalters 这只是其中一种方法,可能有更好的方式: (1) 创建 Map<Character,Character> table = new HashMap<Character,Character>(); table.put('Ä','A');... (2) 使用 Character unicode;... Character ascii = table.get(unicode); - emory
这并不是关于听起来如何。情景是这样的 - 你想使用应用程序,但没有瑞典键盘。因此,你可以通过用拉丁字母表中的典型字母替换特殊字母来输入,而不是查看字符映射表。 - grem
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接