Java相当于Invariant Culture

我正在将以下C#代码转换为Java。 是否存在与Invariant Culture的.NET概念相当的Java?

string upper = myString.ToUpperInvariant(); 

由于Invariant Culture实际上只是美国文化,我可以在Java中做这样的事情,但我想知道是否有更好的方法:

 String upper = myString.toUpperCase(Locale.US); 

更新:Java 6引入了Locale.ROOT ,其描述如下:

这被视为所有语言环境的基本语言环境,并用作区域设置敏感操作的语言/国家/地区中性区域设置。

这可能比使用US更好,但我没有根据下面的代码检查它。


不,这基本上是正确的方法。 虽然在格式方面美国文化与不变文化之间存在差异,但我认为它们不会影响套管规则。

编辑:实际上,一个快速测试程序显示,在美国文化中,在不变文化中,.NET中存在不同的字符:

 using System; using System.Globalization; class Test { static void Main() { CultureInfo us = new CultureInfo("en-US"); for (int i = 0; i < 65536; i++) { char c = (char) i; string s = c.ToString(); if (s.ToUpperInvariant() != s.ToUpper(us)) { Console.WriteLine(i.ToString("x4")); } } } } 

输出:

 00b5 0131 017f 01c5 01c8 01cb 01f2 0345 0390 03b0 03c2 03d0 03d1 03d5 03d6 03f0 03f1 03f5 1e9b 1fbe 

我现在没有时间看这些,但值得研究。 我不知道Java中是否会存在相同的差异 - 您可能希望对它们进行抽样并找出您希望代码执行的操作。

编辑:只是为了成为completist,值得一提的是,只检查单个字符......而你真的是整个字符串,这可能会产生影响。

查看上层大小的Java代码,它似乎只具有tr,az和lt国家/地区的特定于语言环境的行为。 我知道tr是土耳其,但我不知道其他人......

这看起来是使用任何Locale无法获得的最不变的。 如果你关心扩展的Unicode(过去的UTF16),你需要去找codePoint解决方案(如果你不知道你不需要的代码点:))

  static String toUpperCase(String s){ char[] c = s.toCharArray(); for (int i=0;i