2012-07-11 13 views
6

मैं जावा में दाएं से बाएं भाषाओं में लिखे तारों का पता लगाने की विधि बनाने की कोशिश कर रहा हूं। मैं this question सी # में कुछ ऐसा करने के साथ आया हूं।
अब मुझे ऐसा कुछ करने की ज़रूरत है लेकिन जावा में लिखा गया है।
किसी भी मदद की सराहना की है।यह पता लगाने के लिए कि किसी स्ट्रिंग में कोई दाएं-से-बाएं वर्ण हैं या नहीं?

उत्तर

10

मैं निम्नलिखित कोड के साथ आया था:

char[] chars = s.toCharArray(); 
for(char c: chars){ 
    if(c >= 0x600 && c <= 0x6ff){ 
     //Text contains RTL character 
     break; 
    } 
} 

यह एक बहुत ही कुशल नहीं है या उस बात के लिए एक सही तरीका है लेकिन एक सुझाव मिल सकते हैं।

+7

आपको हिब्रू को शामिल करने के लिए (c> = 0x5D0 && c <= 0x6ff) का उपयोग करना चाहिए, जो एक आरटीएल भाषा भी है। –

0

हो सकता है कि यह मदद करनी चाहिए:

http://en.wikipedia.org/wiki/Right-to-left_mark

वहाँ एक यूनिकोड वर्ण, अर्थात् U + 200F होना चाहिए, जब एक rtl स्ट्रिंग मौजूद है।

सादर

7

प्रश्न पुराने लेकिन शायद किसी और एक ही समस्या हो सकता है है ...

कई समाधान की कोशिश के बाद मैं एक है कि मेरे लिए काम करता पाया:

if (Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT 
    || Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC 
    || Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING 
    || Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE 
    ) { 

    // it is a RTL string 
} 
+0

यह काम नहीं करेगा, क्योंकि आरटीएल पाठ इन अंकों के बिना लिखा गया है। – Liggliluff

1

यहाँ डार्को के जवाब के संस्करण में सुधार हुआ है:

public static boolean isRtl(String string) { 
    if (string == null) { 
     return false; 
    } 

    for (int i = 0, n = string.length(); i < n; ++i) { 
     byte d = Character.getDirectionality(string.charAt(i)); 

     switch (d) { 
      case DIRECTIONALITY_RIGHT_TO_LEFT: 
      case DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC: 
      case DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING: 
      case DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE: 
       return true; 

      case DIRECTIONALITY_LEFT_TO_RIGHT: 
      case DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING: 
      case DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE: 
       return false; 
     } 
    } 

    return false; 
} 

इस कोड को निम्नलिखित मामलों के सभी के लिए मेरे लिए काम करता है:

בוקר טוב    => true 
good morning בוקר טוב => false 
בוקר טוב good morning => true 
good בוקר טוב morning => false 
בוקר good morning טוב => true 
(בוקר טוב)    => true 
संबंधित मुद्दे

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