我正在将以下C#代码转换为Java.是否存在与Invariant Culture的.NET概念相当的Java?
string upper = myString.ToUpperInvariant();
Run Code Online (Sandbox Code Playgroud)
由于Invariant Culture实际上只是美国文化,我可以在Java中做这样的事情,但我想知道是否有更好的方法:
String upper = myString.toUpperCase(Locale.US);
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 22
更新:引入了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"));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
00b5
0131
017f
01c5
01c8
01cb
01f2
0345
0390
03b0
03c2
03d0
03d1
03d5
03d6
03f0
03f1
03f5
1e9b
1fbe
Run Code Online (Sandbox Code Playgroud)
我现在没时间看这些,但值得研究.我不知道Java中是否会存在相同的差异 - 您可能想要对它们进行抽样并找出您希望代码执行的操作.
编辑:只是为了成为completist,值得一提的是,只检查单个字符......而你真的是整个字符串的上限,这可能会产生影响.
查看上层大小的Java代码,看起来只有tr,az和lt国家/地区的特定于语言环境的行为.我知道tr是土耳其,但我不知道其他人......