2012-06-16 15 views
48

के साथ लोकेल का उपयोग करना मैं कोड में सभी वर्णों को तारों में अपरकेस या लोअरकेस में परिवर्तित करने के लिए कोड चाहता था।जावा के toLowerCase() और ToUpperCase()

मैं एक विधि है कि कुछ इस तरह चला जाता है पाया:

public static String changelowertoupper() 
{ 
     String str = "CyBeRdRaGoN"; 
     str=str.toLowerCase(Locale.ENGLISH); 
     return str; 
} 

अब मैंने पढ़ा है कि कुछ Locale रों, तुर्की की तरह उपयोग करते हुए, "मैं (डॉट) के बिना रिटर्न की बजाय मैं (डॉट के साथ)। "

क्या यूके, यूएस, इंग्लिश इत्यादि जैसे Locale का उपयोग करना सुरक्षित है? तारों पर लागू होने पर उनके बीच कोई बड़ा अंतर है?

String एस के लिए सबसे पसंदीदा Locale कौन सा है?

+1

क्या आपने स्थानीय लोगों का उपयोग नहीं करने की कोशिश की? – alaster

+1

मैं इसे करने की कोशिश की ... यह Locale.ENGLISH के समान है ...... लेकिन अभी भी मैं शक है कि क्या यह कोई अंतर नहीं है के रूप में वहां मौजूद तुर्की के लिए .... तो उर कोई स्थलों का उपयोग कर करना होगा कह ... । ??? –

+4

आपका आवेदन डिफ़ॉल्ट लोकेल का चयन करेगा, इसलिए यदि कोई तुर्की में तुर्की लोकेल के साथ अपना आवेदन चलाएगा तो वह बिना किसी डॉट – alaster

उत्तर

49

मुझे लगता है कि आप भाषा का प्रयोग करना चाहिए,

के लिए उदाहरण के लिए, "TITLE" .toLowerCase() एक तुर्की लोकेल में "टिटल" देता है, जहां 'ı' लेटिन लघु पत्र डॉटलेस I चरित्र है। को लोकेल असंवेदनशील तारों के लिए सही परिणाम प्राप्त करें, सेLowerCase (Locale.ENGLISH) का उपयोग करें।

मैं आपकी समस्या का हल के रूप में इन कड़ियों को देखें और यह आप में मन में स्थिति रखने के लिए "तुर्की"

**FROM THE LINKS** 

toLowerCase बात है() का सम्मान करता है अंतर्राष्ट्रीयकरण (i18n)। यह आपके लोकेल के संबंध में केस रूपांतरण करता है। जब आप सेLowerCase() को कॉल करते हैं, आंतरिक रूप से LowerCase (Locale.getDefault()) को कहा जाता है। यह लोकेल संवेदनशील है और आपको के आस-पास एक तर्क लिखना नहीं चाहिए, जो इसे स्वतंत्र रूप से लोकेल की व्याख्या करता है।

import java.util.Locale; 

public class ToLocaleTest { 
    public static void main(String[] args) throws Exception { 
     Locale.setDefault(new Locale("lt")); //setting Lithuanian as locale 
     String str = "\u00cc"; 
    System.out.println("Before case conversion is "+str+ 
" and length is "+str.length());// Ì 
     String lowerCaseStr = str.toLowerCase(); 
    System.out.println("Lower case is "+lowerCaseStr+ 
" and length is "+lowerCaseStr.length());// iı` 
    } 
} 

उपरोक्त कार्यक्रम में, इससे पहले और रूपांतरण के बाद स्ट्रिंग की लंबाई को देखो। यह 1 और 3 होगा। हाँ से पहले स्ट्रिंग की लंबाई और रूपांतरण अलग होने के बाद। जब आप इस परिदृश्य पर स्ट्रिंग लम्बाई पर निर्भर करते हैं तो आपका तर्क टॉस के लिए जाएगा। जब आपका प्रोग्राम किसी भिन्न वातावरण में निष्पादित हो जाता है, तो यह असफल हो सकता है। यह कोड समीक्षा में अच्छा पकड़ होगा।

इसे सुरक्षित बनाने के लिए, आप अन्य विधि सेLowerCase (Locale.English) का उपयोग कर सकते हैं और लोकेल को हमेशा अंग्रेजी में ओवरराइड कर सकते हैं। लेकिन फिर आप अंतर्राष्ट्रीयकरण नहीं कर रहे हैं।

तो क्रूक्स है, लोवरकेस() लोकेल विशिष्ट है।

reference 1
reference 2
reference 3


Dotless-मैं, एक लोअरकेस 'i' डॉट के बिना है। इस चरित्र का अपरकेस सामान्य "मैं" है। एक और चरित्र है, "मैं डॉट के साथ"। इस चरित्र का लोअरकेस सामान्य लोअरकेस "i" है।

क्या आपने समस्या देखी है? यह अनमोल रूपांतरण प्रोग्रामिंग में एक गंभीर समस्या का कारण बनता है। हम इस समस्या का ज्यादातर जावा अनुप्रयोगों में सामना करते हैं क्योंकि (आईएमएचओ) लोअरकेस और अपरकेस फ़ंक्शन के खराब कार्यान्वयन के कारण।

जावा में, String.toLowerCase() विधि डिफ़ॉल्ट लोकेल के अनुसार वर्णों को लोअरकेस में परिवर्तित करती है। यह समस्या का कारण बनता है यदि आपका एप्लिकेशन तुर्की लोकेल में काम करता है और विशेष रूप से यदि आप इस फ़ंक्शन का उपयोग किसी फ़ाइल नाम या यूआरएल के लिए कर रहे हैं जो किसी निश्चित चरित्र सेट का पालन करना होगा।

मैंने पहले दो गंभीर उदाहरणों को ब्लॉग किया है: स्क्रिप्ट पुस्तकालयों के साथ संकलन त्रुटियों को उनके नाम में "i" और एक्सएसपी प्रबंधक की गलती के साथ संकलित त्रुटियां यदि कोई XPAGE उसके नाम पर "I" डेटाबेस में है।

एक लंबा इतिहास है, जैसा कि मैंने कहा था। उदाहरण के लिए कुछ आर 7 संस्करण में, राउटर प्राप्तकर्ता को एक संदेश भेजने में असमर्थ था अगर उसका नाम "मैं" से शुरू होता है। संदेश रिपोर्टिंग एजेंट आर 8 तक तुर्की लोकेल में नहीं चल रहे थे। तुर्की लोकेल वाला कोई भी कमल नोट्स 8.5.1 इंस्टॉल नहीं कर सका (यह असली है!)। सूची जारी है ...

तुर्की से लगभग कोई बीटा परीक्षक नहीं है और ग्राहक इन समस्याओं के लिए पीएमआर नहीं खोलते हैं। इसलिए विकास की टीमों के लिए ये समस्याएं पहली प्राथमिकता तक नहीं जा रही हैं।

भी जावा टीम ताज़ा दस्तावेज़ों के लिए एक विशेष चेतावनी जोड़ा गया है:

इस विधि स्थान संवेदनशील है, और अप्रत्याशित परिणाम अगर तार स्वतंत्र रूप से स्थान व्याख्या की जा करने का इरादा कर रहे हैं कि के लिए इस्तेमाल हो सकता है। उदाहरण प्रोग्रामिंग भाषा पहचानकर्ता, प्रोटोकॉल कुंजी, और HTML टैग हैं। उदाहरण के लिए, एक तुर्की लोकेल में "TITLE" .toLowerCase() locale "tıtle" देता है, जहां 'ı' लेटिन लघु पत्र DOTLESS I वर्ण है। लोकेल असंवेदनशील तारों के लिए सही परिणाम प्राप्त करने के लिए, LowerCase (Locale.ENGLISH) का उपयोग करें।

कृपया लिंक मैं यह सब कठबोली पोस्ट पढ़ें

+1

तो आप यह कह रहे हैं कि मैंने लोकेल को इंग्लिश के रूप में निर्दिष्ट किया है या बस str.toLowerCase()। यह होगा ...... और मुझे स्ट्रिंग लम्बाई के बारे में चिंता करने की ज़रूरत नहीं है .... ??? –

+3

कृपया उन सभी लिंक को पढ़ें जिन्हें मैं पोस्ट कर सकता हूं "यह आपकी टिप्पणी का उत्तर दे रहा है" – shareef

+1

के ... ठीक है ... मुझे यह मिला .. धन्यवाद .. –

5
String str = "CyBeRdRaGoN"; 

str = str.toLowerCase(); // str = "cyberdragon" 

str = str.toUpperCase(); // str = "CYBERDRAGON" 

आपका आवेदन, सामान्य स्थान का चयन इसलिए यदि किसी को तुर्की वातावरण के साथ तुर्की में आपके आवेदन चलेंगे होगा वह डॉट बिना i देखेंगे

2

आप अपने String की भाषा के लिए उपयुक्त स्थान बना सकते हैं "यह आपकी टिप्पणी का जवाब है"।

उदाहरण के लिए:

toUpperCase(new Locale("tr","TR")); 

तुर्की के लिए चाल करेंगे।

0

यदि आप एक स्ट्रिंग (उदा। खोज) की जांच के लिए इस फ़ंक्शन का उपयोग कर रहे हैं तो यह जांचने के लिए लोअरकेस या अपरकेस फ़ॉर्म में तारों का उपयोग करना सुरक्षित है।आप इसे इस तरह का उपयोग कर सकते हैं:

if (mViewData.list.data[i].Name.toLowerCase(new Locale("tr", "TR")) 
    .contains(mViewHolder.tctSearch.getText().toString().trim() 
             .toLowerCase(new Locale("tr", "TR")))) { 
    // your code here... 
} 

मैं एक ही मुद्दे का सामना लेकिन सूचीदृश्य में खोज के एक मामले में। मैंने यह जवाब जोड़ा कि यह किसी ऐसे व्यक्ति की मदद कर सकता है जिसकी एक ही समस्या है।

संबंधित मुद्दे