我无法打印/比较字母æøå和大写字母ÆØÅ。我的代码在Eclipse STS 2.5中的Mac OS X 10.6.4上运行,我已经将Eclipse设置为使用UTF-8而不是MacRoman。似乎equalsIgnoreCase,toUpperCase和toLowerCase都不起作用,我无法正确地将字母打印到控制台。对我失踪的任何想法?
示例:
String ae1 = "æ";
String ae2 = "Æ";
System.out.println(ae1);
System.out.println(ae2.toLowerCase());
if(ae1.equalsIgnoreCase(ae2))
System.out.println("match");
else
System.out.println("no match");
返回:
æ
ß
no match
答案 0 :(得分:4)
嗯,目前还不清楚您处于以下哪种情况:
equalsIgnoreCase
失败,控制台失败我强烈建议您尝试使用\uxxxx
格式以确保获得正确的输入数据。您可以通过打印(int) ae1.charAt(0)
的值并查看哪个Unicode字符来分析当前代码。
一旦你把事情分开来确定哪个阶段失败了,你就可以适当地调整代码 - 无论是使用Collator
还是其他方法。
答案 1 :(得分:3)
您的输出清楚地表明您的源文件是UTF-8,但编译器配置为将源读取为Mac OS Roman。
由于您说您将Eclipse配置为使用UTF-8,因此您的配置可能有些错误或不完整。
要确保源编码不匹配存在问题,可以使用Unicode转义替换这些字符。在这种情况下,equalsIgnoreCase()
按预期工作:
String ae1 = "\u00e6";
String ae2 = "\u00c6";
答案 2 :(得分:3)
equals()不用于比较自然语言。你应该使用Collator:http://java-x.blogspot.com/2006/09/javatextcollator-for-string-comparison.html
答案 3 :(得分:0)
我想我的字符串文字编译错误,因为编译器或eclipse没有正确配置,但我还没弄清楚它是什么。然而,使用\uxxxx
格式确实解决了我的问题,所以我暂时将其留在那里。
如果我偶然发现一个解决方案,我会在这里发布。
感谢您的回答!