2012-07-11 14 views

答えて

10

私は、次のコードを思い付いた:それは正確な方法は非常に効率的か、そのことについてではないのですが、1つのアイデアを与えることができます

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

。私は私のために動作するものを発見したいくつかの解決しようとした後

+7

また、RTL言語であるヘブライ語を含むように(C> = 0x5D0 && C <= 0x6ff)を使用する必要があります。 –

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

RTLテキストはこれらのマークなしで書かれているので、これは機能しません。 – 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