java - जावा के toLowerCase () और ToUpperCase () के साथ लोकेल का उपयोग करना




2 Answers

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

उदाहरण के लिए, एक तुर्की लोकेल में "TITLE" .toLowerCase () "tıtle" लौटाता है, जहां 'ı' लेटिन लघु पत्र डॉटलेस 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) पर एक और विधि का उपयोग कर सकते हैं और लोकेल को हमेशा अंग्रेज़ी में ओवरराइड कर सकते हैं। लेकिन फिर आप अंतर्राष्ट्रीय नहीं हैं।

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

संदर्भ 1
संदर्भ 2
संदर्भ 3


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

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

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

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

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

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

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

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

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

मैं जावा में स्ट्रिंग्स में अपरकेस या लोअरकेस में सभी अक्षरों को परिवर्तित करने के लिए कोड चाहता था।

मुझे एक ऐसी विधि मिली जो इस तरह कुछ जाती है:

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

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

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

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




आप अपनी String की भाषा के लिए उपयुक्त लोकेल बना सकते हैं।

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

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

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




Related