如何检测字符串是否包含任何从右到左的字符?

问题描述:

我试图做一个方法来检测在Java中从右到左语言编写的字符串。我已经拿出this question在C#中做类似的事情。
现在我需要有类似的东西,但用Java编写。
任何帮助表示赞赏。如何检测字符串是否包含任何从右到左的字符?

我想出了下面的代码:

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

这不是一个非常有效的或与此有关的一个准确的方法,但可以提供一个思路。

+7

您应该使用(c> = 0x5D0 && c 2014-02-25 08:51:28

也许这应该有所帮助:

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

应该有一个Unicode字符,即U + 200F,当RTL字符串是存在的。

问候

问题是旧的,但也许其他人可能有同样的问题...

尝试多种解决方案之后,我发现,我的作品之一:

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 2017-02-09 23:43:54

这里的改进达科的回答版本:

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