如何检测如果字符串包含任何从右到左的字符?(How to detect if a string co

2019-07-30 08:43发布

我试图让检测写在从右到左的语言在Java中的字符串的方法。 我想出了这个问题做的在C#中类似的东西。
现在,我需要有类似的东西,但用Java编写的。
任何帮助表示赞赏。

Answer 1:

我想出了下面的代码:

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

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



Answer 2:

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

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

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
}


Answer 3:

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

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


Answer 4:

也许这应该有所帮助:

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

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

问候



文章来源: How to detect if a string contains any Right-to-Left character?