Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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中将希腊语转换为大写_Java_Localization_Internationalization - Fatal编程技术网

在Java中将希腊语转换为大写

在Java中将希腊语转换为大写,java,localization,internationalization,Java,Localization,Internationalization,我想做的很简单: String example = "Τάχιστη αλώπηξ βαφής ψημένη γη - Mary Had A Little Lamb"; String upper = example.toUpperCase(); 在希腊语中,只有大写单词的第一个字母应该包含重音字符 // upper contains the following (incorrect) string: // ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ - MARY HAD A

我想做的很简单:

String example = "Τάχιστη αλώπηξ βαφής ψημένη γη - Mary Had A Little Lamb";
String upper = example.toUpperCase();
在希腊语中,只有大写单词的第一个字母应该包含重音字符

// upper contains the following (incorrect) string:
// ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ - MARY HAD A LITTLE LAMB

// correct string:
// ΤΑΧΙΣΤΗ ΑΛΩΠΗΞ ΒΑΦΗΣ ΨΗΜΕΝΗ ΓΗ - MARY HAD A LITTLE LAMB 
(口音很难看出来,但它们确实存在。)

根据,我应该能够将区域设置传递给
toUpperCase
,如下所示:

String upper = example.toUpperCase(new java.util.Locale("el"));
但是,
toUpperCase
似乎没有正确处理希腊语的特定规则

是否可以为特定区域设置定义
toUpperCase
的行为,以便确保得到正确的结果


或者,我可以编写一个实用程序类来处理这种特殊情况。但如果可能的话,我更愿意根据语言环境重写这个函数,以防其他语言出现这种情况

我尝试了以下方法,似乎奏效了:

String example = "Τάχιστη αλώπηξ βαφής ψημένη γη - Mary Had A Little Lamb";
String upper = example.toUpperCase();
String temp = Normalizer.normalize(upper, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
System.out.println(pattern.matcher(temp).replaceAll(""));

根据@ajb,默认情况下Java不支持这一点。我必须创建自己的解决方案。

查看
toUpperCase
的源代码,它似乎只是单独翻译每个字符,而没有查看文本的其余部分,除了三种情况:土耳其语、阿塞拜疆语、立陶宛语。这些都是硬连接到代码中的。所以你可能得自己动手。(顺便说一句,也许你应该将此作为错误报告提交给Oracle。)这正是我所担心的。我没有看到,但我希望有一种方法可以扩展每个区域的行为。硬连线代码看起来像
布尔localeDependent=(lang==“tr”| | lang==“az”| | lang==“lt”)。他们使用
==
来比较字符串。gaaaack@Glen:你能给我一个链接,链接到与大写希腊字母相关的语法规则的来源吗?到目前为止,我知道最后的Sigma在小写时是正确的,但我从来没有听说过你提到的规则。可能最好的例子是,在希腊语(el)中,当整个单词都是大写(ά/Α)时,元音会失去重音,除了析取的eta(ή/Ή)。此外,第一个元音上带有重音的双元音失去了重音,第二个元音上的双元音变为重音符(άι/ΑΪ)。另请参见:什么解决方案??