在android/Java中,如果字符串文本是从右到左写的,是否可以识别?

vecaoik1  于 2023-05-21  发布在  Android
关注(0)|答案(5)|浏览(186)

我正在编写一个android应用程序,我需要识别字符串中的文本是否是用RTL(从右到左)语言编写的?谢谢!

2w3rbyxf

2w3rbyxf1#

通过检查第一个字符是否在RTL unicode字符的范围内来检查给定的String是否是用RTL编写的。

public static boolean checkRtl ( String string ) {
    if (TextUtils.isEmpty(string)) {
        return false;
    }
    char c = string.charAt(0);
    return c >= 0x590 && c <= 0x6ff;
}
bxgwgixi

bxgwgixi2#

两件事:
一个/http://pastebin.com/e276zn6y Javascript代码来确定一个字符的脚本。应该能给予你个主意。并在以下方面的帮助下:
B/ ftp://unicode.org/Public/UNIDATA/extracted/DerivedBidiClass.txt

# Bidi_Class=Right_To_Left
0590          ; R # Cn       <reserved-0590>
05BE          ; R # Pd       HEBREW PUNCTUATION MAQAF
05C0          ; R # Po       HEBREW PUNCTUATION PASEQ
05C3          ; R # Po       HEBREW PUNCTUATION SOF PASUQ
05C6          ; R # Po       HEBREW PUNCTUATION NUN HAFUKHA
05C8..05CF    ; R # Cn   [8] <reserved-05C8>..<reserved-05CF>
05D0..05EA    ; R # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV

[...]截短的
它给你所有块的方向(显示RTL部分的开始),你可以弄清楚剩下的部分。
编辑:您可能还需要检查从右到左格式字符(U+20 xx),请参阅http://www.unicode.org/charts/PDF/U2000.pdf

wxclj1h5

wxclj1h53#

Java中不是已经原生支持了吗?

/**
* Determine if String is right-to-left (RTL).
* Example of RTL languages: Arabic, Hebrew, etc
*/
private boolean isRTL(String s) {
   for (int i = 0; i < s.length(); i++) {
       byte d = Character.getDirectionality(s.charAt(i));
       if (d == Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
           d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC ||
           d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING ||
           d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
       ) {
           return true;
       }
    }

    return false;
}
daupos2t

daupos2t4#

根据android文档,Bidi对象提供了用于创建它的文本的双向重新排序信息。例如,这是正确显示阿拉伯语或希伯来语文本所必需的。这些语言本质上是混合方向的,因为它们从左到右排列数字,而从右到左排列大多数其他文本。

Bidi bidi = new Bidi( myString, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT );

if( bidi.isLeftToRight() ) {
   // myString is LTR
} else {
   // myString is RTL
}
ryevplcw

ryevplcw5#

您可以使用Bidi类进行检查

private fun isTextRTL(text: String?): Boolean {
    val bidi = Bidi(text, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT)
    return bidi.isRightToLeft
}

相关问题