Sea*_*oyd 123

我认为你的问题与以下相同:

因此答案也是一样的:

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

看到

示例代码:

final String input = "T?ï? ?š â f???? Š?????";
System.out.println(
    Normalizer
        .normalize(input, Normalizer.Form.NFD)
        .replaceAll("[^\\p{ASCII}]", "")
);
Run Code Online (Sandbox Code Playgroud)

输出:

这是一个时髦的字符串

  • 我认为值得注意的是,*Normalizer*类是自API 9以来Android SDK的一部分. (2认同)

Mic*_*rdt 10

您可以使用java.text.Normalizer单独的基本字母和变音符号,然后通过正则表达式删除后者:

public static String stripDiacriticas(String s) {
    return Normalizer.normalize(s, Form.NFD)
        .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 9

首先 - 你不应该.这些符号具有特殊的语音特性,不应忽视.

转换它们的方法是创建一个Map包含每对的方法:

Map<Character, Character> map = new HashMap<Character, Character>();
map.put('á', 'a');
map.put('é', 'e');
//etc..
Run Code Online (Sandbox Code Playgroud)

然后循环字符串中的字符,通过调用创建一个新字符串 map.get(currentChar)

  • +1代表*你不应该* (6认同)
  • @Andreas是的,我想这会要求一个特定于语言环境的Normalizer函数(祝你好运:-)). (2认同)
  • 您有很多理由会这么做。例如,如果您想将文件存储在光盘上,但文件名包含这些字符。NTFS(与大多数其他FS一样)不允许这样做。 (2认同)
  • @Bozho 你确定吗?或者换句话说,您是否尝试过 java 支持的所有文件系统上的所有可能的 unicode 字符?我不会冒这个险... (2认同)
  • 我想我想要这个来对字符串集合进行排序。 (2认同)