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

发布于 2025-01-02 06:49:34 字数 65 浏览 4 评论 0原文

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

I'm writing an android application, and i need to recognize if the text i have in a String is written in a language that is RTL(right to left) ?
Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

活雷疯 2025-01-09 06:49:34

通过检查第一个字符是否在 RTL unicode 字符范围内来检查给定的字符串是否以 RTL 格式写入。

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

Check if the given String is written in RTL by checking if the very first character is within the range of RTL unicode characters.

  public static boolean checkRtl ( String string ) {
    if (TextUtils.isEmpty(string)) {
        return false;
    }
    char c = string.charAt(0);
    return c >= 0x590 && c <= 0x6ff;
}
递刀给你 2025-01-09 06:49:34

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

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

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

According to the android document, A Bidi object provides information on the bidirectional reordering of the text used to create it. This is required, for example, to properly display Arabic or Hebrew text. These languages are inherently mixed directional, as they order numbers from left-to-right while ordering most other text from right-to-left.

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

if( bidi.isLeftToRight() ) {
   // myString is LTR
} else {
   // myString is RTL
}
跨年 2025-01-09 06:49:34

两件事:

A/ 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+20xx),请参阅 http://www.unicode.org/charts/PDF/U2000.pdf

Two things:

A/ http://pastebin.com/e276zn6y Javascript code to determine the script of a character. Should give you an idea. And with the help of:

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

[...] truncated

which gives you the direction of all blocks (showing the beginning to the RTL section), you can figure out the rest.

EDIT:
You might also want to check for Right-To-Left format characters (U+20xx), see http://www.unicode.org/charts/PDF/U2000.pdf

隔岸观火 2025-01-09 06:49:34

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;
}

Isn't this already natively supported in 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;
}
关于从前 2025-01-09 06:49:34

您可以使用 Bidi 类来检查

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

You can check that by using the Bidi class

   private fun isTextRTL(text: String?): Boolean {
    val bidi = Bidi(text, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT)
    return bidi.isRightToLeft
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文