2011-03-15 67 views
24

我將下面的C#代碼轉換爲Java。是否有與.NET不變文化概念相當的Java?不變式文化的Java等價物

string upper = myString.ToUpperInvariant(); 

由於不變文化實際上就是美國文化,我可以做這樣的事情在Java中,但我不知道是否有更好的辦法:

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

回答

20

更新: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是土耳其,但我不知道其他人...

+1

OUCHY:AZ - 阿塞拜疆,lt是立陶宛 – bestsss 2011-03-15 20:10:28

+0

[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

+1

@AvPinzur:是的,這可能是最合適的。我會更新提及它。 – 2017-10-13 13:56:05

0

這看起來是最不變的,你可以使用任何語言環境獲得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); 
}