java.lang.Object
java.text.Bidi
该类实现了Unicode双向算法。
Bidi对象提供有关用于创建它的文本的双向重新排序的信息。例如,这对于正确显示阿拉伯文或希伯来文本是必需的。这些语言在本质上是混合方向的,因为它们将数字从左到右排序,而将大多数其他文本从右到左排序。
创建后,可以查询Bidi对象,以查看它表示的文本是全部从左到右还是全部从右到左。这些对象非常轻量级,而且这些文本相对容易处理。
如果有多个文本运行,可以通过索引访问有关运行的信息,以获取运行的开始、限制和级别。级别表示方向和方向运行的“嵌套级别”。奇数级别是从右到左,而偶数级别是从左到右。因此,例如级别0表示从左到右的文本,而级别1表示从右到左的文本,级别2表示嵌入在从右到左运行中的从左到右文本。
- 自版本:
- 1.4
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int表示基本方向取决于文本中第一个强方向字符的常量,根据Unicode双向算法。static final int表示基本方向取决于文本中第一个强方向字符的常量,根据Unicode双向算法。static final int表示基本方向为从左到右的常量。static final int表示基本方向为从右到左的常量。 -
Constructor Summary
ConstructorsConstructorDescriptionBidi(char[] text, int textStart, byte[] embeddings, int embStart, int paragraphLength, int flags) 根据给定的文本、嵌入和方向信息创建Bidi。根据给定文本段和基本方向创建Bidi。Bidi(AttributedCharacterIterator paragraph) 根据给定文本段创建Bidi。 -
Method Summary
Modifier and TypeMethodDescriptionboolean如果基本方向为从左到右,则返回true。createLineBidi(int lineStart, int lineLimit) 创建表示当前Bidi所代表的段落中文本行的双向信息的Bidi对象。int返回基本级别(如果从左到右则为0,如果从右到左则为1)。int返回行中文本的长度。intgetLevelAt(int offset) 返回偏移处字符的解析级别。int返回级别运行的数量。intgetRunLevel(int run) 返回此行中第n个逻辑运行的级别。intgetRunLimit(int run) 返回此行中第n个逻辑运行结束后的字符索引,作为相对于行开始的偏移量。intgetRunStart(int run) 返回此行中第n个逻辑运行开始处的字符索引,作为相对于行开始的偏移量。boolean返回行是否全部为从左到右文本且基本方向为从左到右。booleanisMixed()返回行是否不是从左到右或从右到左。boolean返回行是否全部为从右到左文本且基本方向为从右到左。static voidreorderVisually(byte[] levels, int levelStart, Object[] objects, int objectStart, int count) 根据它们的级别,将数组中的对象重新排序为视觉顺序。static booleanrequiresBidi(char[] text, int start, int limit) 返回true如果指定的文本需要双向分析。toString()显示双向内部状态,用于调试。
-
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
根据给定文本段和基本方向创建Bidi。- 参数:
-
paragraph- 一个文本段 -
flags- 控制算法的标志集合。算法理解标志DIRECTION_LEFT_TO_RIGHT、DIRECTION_RIGHT_TO_LEFT、DIRECTION_DEFAULT_LEFT_TO_RIGHT和DIRECTION_DEFAULT_RIGHT_TO_LEFT。其他值保留。
-
Bidi
根据给定文本段创建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
创建表示当前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) 根据它们的级别将数组中的对象重新排序为视觉顺序。这是一个实用函数,用于当您有一组对象,这些对象代表逻辑顺序中的文本运行时使用,每个运行包含单个级别的文本。在对象数组中的index从objectStart到objectStart + count的元素将被重新排序为视觉顺序,假设每个文本运行的级别由级别数组中相应元素指示(在index - objectStart + levelStart处)。- 参数:
-
levels- 表示每个对象的双向级别的数组 -
levelStart- 级别数组中的起始位置 -
objects- 要重新排序为视觉顺序的对象数组 -
objectStart- 对象数组中的起始位置 -
count- 要重新排序的对象数量
-
toString
显示双向内部状态,用于调试。
-