Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将拉丁unicode字符替换为[a-z]字符_Java_Regex_String_Unicode_Normalization - Fatal编程技术网

Java 如何将拉丁unicode字符替换为[a-z]字符

Java 如何将拉丁unicode字符替换为[a-z]字符,java,regex,string,unicode,normalization,Java,Regex,String,Unicode,Normalization,我正在尝试将所有拉丁unicode字符转换为它们的[a-z]表示形式 ó --> o í --> i 我可以很容易地一个接一个地做,例如: myString = myString.replaceAll("ó","o"); 但由于存在大量的变化,这种方法是不切实际的 在Java中还有其他的方法吗?例如正则表达式,或实用程序库 用例: 1-将其他语言中的城市名称翻译成英语,例如 Espírito Santo-->Espirito Santo,此答案需要Java 1.6或更高版本,其中

我正在尝试将所有拉丁unicode字符转换为它们的
[a-z]
表示形式

ó --> o
í --> i
我可以很容易地一个接一个地做,例如:

myString = myString.replaceAll("ó","o");
但由于存在大量的变化,这种方法是不切实际的

在Java中还有其他的方法吗?例如
正则表达式
,或
实用程序库

用例:

1-将其他语言中的城市名称翻译成英语,例如


Espírito Santo-->Espirito Santo,

此答案需要Java 1.6或更高版本,其中添加了

例如:

public class Main {
    public static void main(String[] args) {
        String input = "Árvíztűrő tükörfúrógép";
        System.out.println("Input: " + input);
        String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
        System.out.println("Normalized: " + normalized);
        String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
        System.out.println("Result: " + accentRemoved);
    }
}
结果:

Input: Árvíztűrő tükörfúrógép
Result: Arvizturo tukorfurogep

但是仍然要注意一些例外情况,如l-stroke。对于您的用例来说,这是一种非常粗糙的方法。在德语中,在只能显示ASCII的情况下,umlaut在字符后替换为e,例如,München变为Muenchen。这个城市的英文名字是慕尼黑。我建议你不要带口音。如果您的应用程序无法显示这些重音,那么您的应用程序将严重损坏。@roeland是的,我理解,问题是想象一下,在许多不同的语言中,每种语言都有不同的发音。现在想象一下,在大数据中,试图分析所有这些数据。。。嗯,我的想法可能不会给我们一个合适的城市,但它至少会“尽可能”将其正常化(有一种说法,如果利率超过80%,就足够了)。这就是我们的目标for@nafas啊我understand@JoopEggen我不知道它是如何工作的,我只知道它是如何工作的:)@EpicPandaForce我不想用“”来替换它们。例如,我想用“I”来重新拼写“I”。第一个规范化将单个字符
I
替换为ASCII
I
加上零宽度
'
。然后,所有这些重音,结合变音符号,都会被删除。保留ASCII字母。NFD中的D代表分解。我不知道这个类是核心java的一部分。谢谢你的启发@EpicPandaForce它工作得很好,伙计,起初通过查看代码,它给我留下了不好的印象,但它太棒了
Input: Árvíztűrő tükörfúrógép
Result: Arvizturo tukorfurogep