Module java.base
Package java.text

Class Bidi

java.lang.Object
java.text.Bidi

public final class Bidi extends Object
该类实现了Unicode双向算法。

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

创建后,可以查询Bidi对象,以查看它表示的文本是全部从左到右还是全部从右到左。这些对象非常轻量级,而且这些文本相对容易处理。

如果有多个文本运行,可以通过索引访问有关运行的信息,以获取运行的开始、限制和级别。级别表示方向和方向运行的“嵌套级别”。奇数级别是从右到左,而偶数级别是从左到右。因此,例如级别0表示从左到右的文本,而级别1表示从右到左的文本,级别2表示嵌入在从右到左运行中的从左到右文本。

自版本:
1.4
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    表示基本方向取决于文本中第一个强方向字符的常量,根据Unicode双向算法。
    static final int
    表示基本方向取决于文本中第一个强方向字符的常量,根据Unicode双向算法。
    static final int
    表示基本方向为从左到右的常量。
    static final int
    表示基本方向为从右到左的常量。
  • Constructor Summary

    Constructors
    Constructor
    Description
    Bidi(char[] text, int textStart, byte[] embeddings, int embStart, int paragraphLength, int flags)
    根据给定的文本、嵌入和方向信息创建Bidi。
    Bidi(String paragraph, int flags)
    根据给定文本段和基本方向创建Bidi。
    根据给定文本段创建Bidi。
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    如果基本方向为从左到右,则返回true。
    createLineBidi(int lineStart, int lineLimit)
    创建表示当前Bidi所代表的段落中文本行的双向信息的Bidi对象。
    int
    返回基本级别(如果从左到右则为0,如果从右到左则为1)。
    int
    返回行中文本的长度。
    int
    getLevelAt(int offset)
    返回偏移处字符的解析级别。
    int
    返回级别运行的数量。
    int
    getRunLevel(int run)
    返回此行中第n个逻辑运行的级别。
    int
    getRunLimit(int run)
    返回此行中第n个逻辑运行结束后的字符索引,作为相对于行开始的偏移量。
    int
    getRunStart(int run)
    返回此行中第n个逻辑运行开始处的字符索引,作为相对于行开始的偏移量。
    boolean
    返回行是否全部为从左到右文本且基本方向为从左到右。
    boolean
    返回行是否不是从左到右或从右到左。
    boolean
    返回行是否全部为从右到左文本且基本方向为从右到左。
    static void
    reorderVisually(byte[] levels, int levelStart, Object[] objects, int objectStart, int count)
    根据它们的级别,将数组中的对象重新排序为视觉顺序。
    static boolean
    requiresBidi(char[] text, int start, int limit)
    返回true如果指定的文本需要双向分析。
    显示双向内部状态,用于调试。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • DIRECTION_LEFT_TO_RIGHT

      public static final int DIRECTION_LEFT_TO_RIGHT
      表示基本方向为从左到右的常量。
      参见:
    • DIRECTION_RIGHT_TO_LEFT

      public static final int DIRECTION_RIGHT_TO_LEFT
      表示基本方向为从右到左的常量。
      参见:
    • DIRECTION_DEFAULT_LEFT_TO_RIGHT

      public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT
      表示基本方向取决于文本中第一个强方向字符的常量,根据Unicode双向算法。如果没有强方向字符,则基本方向为从左到右。
      参见:
    • DIRECTION_DEFAULT_RIGHT_TO_LEFT

      public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT
      表示基本方向取决于文本中第一个强方向字符的常量,根据Unicode双向算法。如果没有强方向字符,则基本方向为从右到左。
      参见:
  • Constructor Details

    • Bidi

      public Bidi(String paragraph, int flags)
      根据给定文本段和基本方向创建Bidi。
      参数:
      paragraph - 一个文本段
      flags - 控制算法的标志集合。算法理解标志DIRECTION_LEFT_TO_RIGHT、DIRECTION_RIGHT_TO_LEFT、DIRECTION_DEFAULT_LEFT_TO_RIGHT和DIRECTION_DEFAULT_RIGHT_TO_LEFT。其他值保留。
    • Bidi

      public Bidi(AttributedCharacterIterator paragraph)
      根据给定文本段创建Bidi。

      如果文本中存在RUN_DIRECTION属性,则确定基本方向(从左到右或从右到左)。如果不存在,则使用Unicode双向算法计算基本方向,如果文本中没有强方向字符,则默认为从左到右。如果存在此属性,则必须将其应用于段落中的所有文本。

      如果文本中存在BIDI_EMBEDDING属性,则表示嵌入级别信息。从-1到-62的负值表示绝对级别处的覆盖。从1到62的正值表示嵌入。其中值为零或未定义,则假定基本嵌入级别由基本方向确定。

      如果文本中存在NUMERIC_SHAPING属性,则在运行双向算法之前将欧洲数字转换为其他十进制数字。如果存在此属性,则必须将其应用于段落中的所有文本。

      参数:
      paragraph - 带有可选字符和段属性信息的文本段
      参见:
    • Bidi

      public Bidi(char[] text, int textStart, byte[] embeddings, int embStart, int paragraphLength, int flags)
      根据给定的文本、嵌入和方向信息创建Bidi。嵌入数组可以为null。如果存在,值表示嵌入级别信息。从-1到-61的负值表示绝对级别处的覆盖。从1到61的正值表示嵌入。其中值为零,则假定基本嵌入级别由基本方向确定。
      参数:
      text - 包含要处理的文本段的数组
      textStart - 段落开始的文本数组中的索引
      embeddings - 包含段落中每个字符的嵌入值的数组。可以为null,此时假定没有外部嵌入信息。
      embStart - 嵌入数组中段落开始的索引
      paragraphLength - 文本和嵌入数组中段落的长度
      flags - 控制算法的标志集合。算法理解标志DIRECTION_LEFT_TO_RIGHT、DIRECTION_RIGHT_TO_LEFT、DIRECTION_DEFAULT_LEFT_TO_RIGHT和DIRECTION_DEFAULT_RIGHT_TO_LEFT。其他值保留。
  • Method Details

    • createLineBidi

      public Bidi createLineBidi(int lineStart, int lineLimit)
      创建表示当前Bidi所代表的段落中文本行的双向信息的Bidi对象。如果整个段落适合一行,则不需要此调用。
      参数:
      lineStart - 从段落开始到行开始的偏移量
      lineLimit - 从段落开始到行限制的偏移量
      返回:
      一个Bidi对象
    • isMixed

      public boolean isMixed()
      如果行不是从左到右或从右到左,则返回true。这意味着它具有混合的从左到右和从右到左文本运行,或者基本方向与唯一文本运行的方向不同。
      返回:
      如果行不是从左到右或从右到左,则返回true。
    • isLeftToRight

      public boolean isLeftToRight()
      如果行是全部从左到右文本且基本方向为从左到右,则返回true。
      返回:
      如果行是全部从左到右文本且基本方向为从左到右,则返回true
    • isRightToLeft

      public boolean isRightToLeft()
      如果行是全部从右到左文本且基本方向为从右到左,则返回true。
      返回:
      如果行是全部从右到左文本且基本方向为从右到左,则返回true
    • getLength

      public int getLength()
      返回行中文本的长度。
      返回:
      行中文本的长度
    • baseIsLeftToRight

      public boolean baseIsLeftToRight()
      返回基本方向是否为从左到右。
      返回:
      如果基本方向为从左到右,则返回true
    • getBaseLevel

      public int getBaseLevel()
      返回基本级别(如果从左到右则为0,如果从右到左则为1)。
      返回:
      基本级别
    • getLevelAt

      public int getLevelAt(int offset)
      返回偏移处字符的解析级别。如果偏移小于0或≥行的长度,则返回基本方向级别。
      参数:
      offset - 要返回级别的字符的索引
      返回:
      偏移处字符的解析级别
    • getRunCount

      public int getRunCount()
      返回级别运行的数量。
      返回:
      级别运行的数量
    • getRunLevel

      public int getRunLevel(int run)
      返回此行中第n个逻辑运行的级别。
      参数:
      run - 运行的索引,介于0和getRunCount()之间
      返回:
      运行的级别
    • getRunStart

      public int getRunStart(int run)
      返回此行中第n个逻辑运行开始处的字符索引,作为相对于行开始的偏移量。
      参数:
      run - 运行的索引,介于0和getRunCount()之间
      返回:
      运行的开始
    • getRunLimit

      public int getRunLimit(int run)
      返回此行中第n个逻辑运行之后字符的索引,作为相对于行起始位置的偏移量。例如,对于行上的最后一个运行,这将返回行的长度。
      参数:
      run - 运行的索引,介于0和getRunCount()之间
      返回:
      运行的限制
    • requiresBidi

      public static boolean requiresBidi(char[] text, int start, int limit)
      如果指定的文本需要双向分析,则返回true。如果返回false,则文本将从左到右显示。客户端可以避免构造Bidi对象。假定Unicode的阿拉伯表示形式区域中的文本已经被形状化和排序以供显示,因此不会导致此函数返回true。
      参数:
      text - 包含要测试的字符的文本
      start - 要测试的字符范围的起始位置
      limit - 要测试的字符范围的限制
      返回:
      如果字符范围需要双向分析,则返回true
    • reorderVisually

      public static void reorderVisually(byte[] levels, int levelStart, Object[] objects, int objectStart, int count)
      根据它们的级别将数组中的对象重新排序为视觉顺序。这是一个实用函数,用于当您有一组对象,这些对象代表逻辑顺序中的文本运行时使用,每个运行包含单个级别的文本。在对象数组中的indexobjectStartobjectStart + count的元素将被重新排序为视觉顺序,假设每个文本运行的级别由级别数组中相应元素指示(在index - objectStart + levelStart处)。
      参数:
      levels - 表示每个对象的双向级别的数组
      levelStart - 级别数组中的起始位置
      objects - 要重新排序为视觉顺序的对象数组
      objectStart - 对象数组中的起始位置
      count - 要重新排序的对象数量
    • toString

      public String toString()
      显示双向内部状态,用于调试。
      覆盖:
      toString 在类 Object
      返回:
      对象的字符串表示形式。