C# 不变文化的Java等价物
我正在将下面的C#代码转换为Java。是否有一个Java等价于.NET不变文化的概念C# 不变文化的Java等价物,c#,java,culture,C#,Java,Culture,我正在将下面的C#代码转换为Java。是否有一个Java等价于.NET不变文化的概念 string upper = myString.ToUpperInvariant(); 由于不变文化实际上只是美国文化,我可以在Java中做类似的事情,但我想知道是否有更好的方法: String upper = myString.toUpperCase(Locale.US); 更新:引入Java 6,描述如下: 这被视为所有区域设置的基本区域设置,并用作区域设置敏感操作的语言/国家中立区域设置 这可能比使用
string upper = myString.ToUpperInvariant();
由于不变文化实际上只是美国文化,我可以在Java中做类似的事情,但我想知道是否有更好的方法:
String upper = myString.toUpperCase(Locale.US);
更新:引入Java 6,描述如下:
这被视为所有区域设置的基本区域设置,并用作区域设置敏感操作的语言/国家中立区域设置
这可能比使用我们好,但我没有对照下面的代码检查它
不,这基本上是正确的方法。虽然美国文化和不变文化在格式方面存在差异,但我认为它们不会影响大小写规则 编辑:事实上,一个快速测试程序显示,在美国区域性的.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"));
}
}
}
}
我现在没有时间看这些,但值得调查。我不知道同样的差异是否也适用于Java——您可能希望从中抽取一个示例,并计算出您希望代码做什么
编辑:作为一个完美主义者,值得一提的是,它只检查单个字符。。。而实际上,你是整个管柱的上套管,这可能会有所不同
查看上框的Java代码,它似乎只有tr、az和lt国家/地区的特定于语言环境的行为。我知道tr是土耳其,但我不知道其他的…这看起来是使用任何语言环境都可以得到的最不变的w/o。 如果您喜欢扩展Unicode(超过UTF16),则需要使用代码点解决方案(如果您不知道代码点,则不需要它:)
静态字符串大小写(字符串s){
char[]c=s.toCharArray();
对于(inti=0;iouchy:az-阿塞拜疆,它是立陶宛那又如何?(Per.)@AvPinzur:yes,这可能是最合适的。我会更新以提及它。
00b5
0131
017f
01c5
01c8
01cb
01f2
0345
0390
03b0
03c2
03d0
03d1
03d5
03d6
03f0
03f1
03f5
1e9b
1fbe
static String toUpperCase(String s){
char[] c = s.toCharArray();
for (int i=0;i<c.length;i++){
c[i]=Character.toUpperCase(c[i]);
}
return String.copyValueOf(c);
}