2014-04-13 6 views
6

मेरे पास फॉर्म में संपादन है, मैं चाहता हूं कि मेरे प्रोग्राम को संपादित करने के लिए उपयोगकर्ता इनपुट टेक्स्ट editxtस्ट्रिंग कैसे निर्धारित करें अंग्रेजी या फारसी है?

क्या स्ट्रिंग निर्धारित करने का कोई तरीका अंग्रेजी या फारसी है?

मैं अरबी

public static boolean isProbablyArabic(String s) { 
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) { 
    int c = s.codePointAt(i); 
    if (c >= 0x0600 && c <=0x06E0) 
     return true; 
} 
return false; 
} 

के लिए इस कोड को पाया, लेकिन मैं कैसे फारसी के लिए इस कोड को परिवर्तित कर सकते हैं?

+0

चरित्र कोड सीमा शायद इस सरल या/या प्रश्न के लिए पर्याप्त मजबूत है। अधिक उन्नत दृष्टिकोण के लिए, कुछ भाषा-पहचान पुस्तकालयों को देखें। – tripleee

+0

@tripleee फारसी वर्ण कोड सीमा क्या है? – Saeed

+0

http://en.wikipedia.org/wiki/Arabic_script_in_Unicode – tripleee

उत्तर

2

फ़ारसी (उर्दू के लिए) के लिए सभी संभव यूनिकोड पर्वतमाला वर्णमाला:

  • 0x0600 to 0x06FF
  • 0xFB50 to 0xFDFF
  • 0xFE70 to 0xFEFF

    तो अगर आप किसी भी चार की जांच याद नहीं करना चाहती सभी श्रेणियों । आशा आपको मदद करता है।

1

आप इसे क्यों का मूल्यांकन नहीं जब कीबोर्ड पॉपअप है .. मतलब आप फोन की भाषा हो रही द्वारा यह कर सकते हैं ... यहाँ विधि useLocale.getDefault() getDisplayLanguage() है।; minSDK 11 आवश्यक है।

+0

लेकिन शायद उपयोगकर्ता कॉपी और पेस्ट टेक्स्ट! – Saeed

+0

और प्रोग्राम मिनीएसडीके 8 – Saeed

+0

है यदि आपका ऐप ऑनलाइन है ... Google अनुवाद API – Bhaskar

0

वर्णों की श्रेणी का उपयोग करना कुछ भाषाओं का पता लगाने का एक सही तरीका नहीं है, जैसे अरबी, फारसी और उर्दू रेंज ओवरलैप किया गया है। लेकिन, यदि आप इस तरह से जोर देते हैं, तो मेरा सुझाव विशेष वर्णों की तलाश में है जो भाषा-विशिष्ट हैं। उदाहरण के लिए, گ या پ फारसी में हैं लेकिन अरबी में नहीं हैं। दूसरी तरफ, फारसी से अरबी पाठ में ئ या ة शायद अधिक आम है। इन विशिष्ट पात्रों की गिनती करके आप अरबी, फारसी और उर्दू के बीच अंतर कर सकते हैं।

हालांकि मुझे उल्लिखित विधि से अच्छे परिणाम मिल गए हैं, लेकिन भाषा का पता लगाने के लिए एन-ग्राम का उपयोग करना अधिक लोकप्रिय और भरोसेमंद है। ऐसी कई पुस्तकालय हैं जो इस विधि से भाषा का पता लगाने का कार्य करते हैं।

1

वहाँ निर्धारित करने के लिए क्या भाषा अपने उपयोगकर्ता में लिख रहा है, जब तक आप वास्तव में जटिल हो कोई सटीक तरीका नहीं है, इसलिए क्यों विधि उदाहरण आपके द्वारा दिए गए isProbablyArabic बजाय isArabic कहा जाता है। यदि आपके उपयोगकर्ता विशेष रूप से अंग्रेजी या फारसी में लिख रहे हैं और कुछ भी नहीं, तो एक विकल्प रेगेक्स का उपयोग करना है जो यह देखने के लिए दिखता है कि उपयोगकर्ता के पाठ में पश्चिमी रोमन वर्ण ("^[a-zA-Z]*$") शामिल हैं, यदि यह झूठा रिटर्न देता है तो आप मान सकते हैं कि उन्होंने फ़ारसी में टाइप किया है , हालांकि यह कुछ भी हो सकता है जो एक अलग चरित्र सेट का उपयोग करता है।

1

इस विधि

public static boolean textIsPersian(String s) { 
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) { 
    int c = s.codePointAt(i); 
    if (c >= 0x0600 && c <=0x06FF || c== 0xFB8A || c==0x067E || c==0x0686 || c==0x06AF) 
     return true; 
} 
return false; 

यह this जवाब पर आधारित है की कोशिश करो। वैकल्पिक रूप से, आप श्रेणियों गुइडो मोचा के जवाब में दी गई उपयोग कर सकते हैं:

public static boolean textIsPersian(String s) { 
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) { 
    int c = s.codePointAt(i); 
    if ((c >= 0x0600 && c <=0x06FF) || (c>=0xFB50 && c<=0xFDFF) || (c>=0xFE70 && c<=0xFEFF)) 
     return true; 
} 
return false; 
} 
2

आप पता कर सकते हैं एक स्ट्रिंग अंग्रेज़ी या रेगेक्स का उपयोग करके फारसी है।

public static final Pattern VALID_NAME_PATTERN_REGEX = Pattern.compile("[a-zA-Z_0-9]+$"); 

public static boolean isEnglishWord(String string) { 
    return VALID_NAME_PATTERN_REGEX.matcher(string).find(); 
} 

यह केवल शब्दों और संख्याओं के साथ काम करता है। यदि '=' या '+' जैसे कोई चरित्र है, तो फ़ंक्शन झूठी वापसी करेगा। आप जो भी चाहते हैं उससे मेल खाने के लिए रेगेक्स को संपादित करके इसे ठीक कर सकते हैं।

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

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