我將下面的C#代碼轉換爲Java。是否有與.NET不變文化概念相當的Java?不變式文化的Java等價物
string upper = myString.ToUpperInvariant();
由於不變文化實際上就是美國文化,我可以做這樣的事情在Java中,但我不知道是否有更好的辦法:
String upper = myString.toUpperCase(Locale.US);
我將下面的C#代碼轉換爲Java。是否有與.NET不變文化概念相當的Java?不變式文化的Java等價物
string upper = myString.ToUpperInvariant();
由於不變文化實際上就是美國文化,我可以做這樣的事情在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中是否會有相同的差異 - 你可能想要對它們進行抽樣並找出你想要的代碼。
編輯:只是爲了完成,值得一提的是,只檢查個別字符...而你真的上層整個字符串,這可以有所作爲。
看着Java上殼的代碼,似乎只有tr,az和lt國家的特定於locale的行爲。我知道tr是土耳其,但我不知道其他人...
這看起來是最不變的,你可以使用任何語言環境獲得W/O。 如果你關心擴展的Unicode(UTF16過去),你就需要去解決的碼點(如果你不知道你不需要它的代碼點:))
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);
}
OUCHY:AZ - 阿塞拜疆,lt是立陶宛 – bestsss 2011-03-15 20:10:28
[Locale.ROOT](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#ROOT)呢? (Per [相關問題/答案](https://stackoverflow.com/questions/41108804/what-is-the-c-sharp-equivalent-of-javas-locale-root-and-locale-getdefault) 。) – 2017-10-13 13:52:31
@AvPinzur:是的,這可能是最合適的。我會更新提及它。 – 2017-10-13 13:56:05