2011-03-15 23 views
24

मैं निम्नलिखित सी # कोड जावा में परिवर्तित कर रहा हूं। क्या Invariant संस्कृति की .NET अवधारणा के बराबर जावा है?जावा इनवेरिएंट संस्कृति के समतुल्य

string upper = myString.ToUpperInvariant(); 

के बाद से अपरिवर्तनीय संस्कृति वास्तव में सिर्फ अमेरिका संस्कृति है, मैं सिर्फ जावा में कुछ इस तरह कर सकता है, लेकिन अगर वहाँ एक बेहतर तरीका है मैं सोच रहा हूँ:

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

उत्तर

20

अद्यतन: जावा 6 शुरू की Locale.ROOT जो के रूप में वर्णित है:

यह सभी स्थानों के आधार स्थान के रूप में माना जाता है, और स्थान संवेदनशील कार्यों के लिए भाषा/देश तटस्थ स्थान के रूप में प्रयोग किया जाता है।

यह शायद यूएस का उपयोग करने से बेहतर है, लेकिन मैंने इसे नीचे दिए गए कोड के खिलाफ जांच नहीं की है।


नहीं, यह मूल रूप से जाने का सही तरीका है। जबकि स्वरूपण के मामले में अमेरिकी संस्कृति और परिवर्तनीय संस्कृति के बीच मतभेद हैं, मुझे विश्वास नहीं है कि वे आवरण नियमों को प्रभावित करते हैं।

संपादित करें: असल में, एक त्वरित परीक्षण कार्यक्रम से पता चलता है कि वहाँ वर्ण जो ऊपरी मामलों अपरिवर्तनीय संस्कृति में करने के लिए अमेरिका की संस्कृति में .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 

मेरे पास अभी इन्हें देखने के लिए समय नहीं है, लेकिन यह जांच के लायक है। मुझे नहीं पता कि जावा में समान मतभेद लागू होंगे या नहीं - आप शायद उनका नमूना लेना चाहते हैं और काम करना चाहते हैं कि आप अपना कोड क्या करना चाहते हैं।

संपादित करें: और केवल पूर्ण होने के लिए, यह उल्लेखनीय है कि केवल व्यक्तिगत पात्रों के लिए जांच करता है ... जबकि आप वास्तव में ऊपरी-आवरण पूरे तार हैं, जो एक अंतर डाल सकते हैं।

ऊपरी-आवरण के लिए जावा कोड को देखते हुए, ऐसा लगता है कि केवल tr, az और lt देशों के लिए लोकेल-विशिष्ट व्यवहार होता है। मुझे पता है कि टी तुर्की है, लेकिन मुझे दूसरों के बारे में पता नहीं है ...

+1

Ouchy: az - अज़रबैजान, लेफ्टिनेंट लिथुआनिया – bestsss

+0

[Locale.ROOT] (https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#ROOT) के बारे में क्या है? (प्रति [संबंधित प्रश्न/उत्तर यहां] (https://stackoverflow.com/questions/41108804/what-is-the-c-sharp-equivalent-of-javas-locale-root-and-locale-getdefault) ।) –

+1

@AvPinzur: हाँ, यह शायद सबसे उपयुक्त है। मैं इसका उल्लेख करने के लिए अद्यतन करूँगा। –

0

यह किसी भी लोकेल का उपयोग करके आप सबसे अधिक आविष्कार प्राप्त कर सकते हैं। आप बढ़ाया यूनिकोड (अतीत 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); 
} 
संबंधित मुद्दे