java.text

接口
异常
java.lang.Object
  继承者 java.text.Bidi

public final class Bidi
     
extends Object

此类实现了 Unicode 双向算法 (Unicode Bidirectional Algorithm)。

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

一旦创建完成,Bidi 对象就能查询,以查看文本表示都是从左向右或从右向左。这些对象都是非常轻量级的并且此文本也相对容易处理。

如果有多次文本的运行,则可以通过索引访问运行的信息,以获得起始位置、限制和运行层次。层次代表了方向和一个方向运行的“嵌套层次”。奇数层次是从右到左,则偶数层次是从左到右。因此,例如层次 0 代表从左到右的文本,而层次 1 代表从右到左的文本,层次 2 代表嵌入在一个从右到左的运行中的从左到右的文本。

从以下版本开始:
1.4

字段摘要
static int DIRECTION_DEFAULT_LEFT_TO_RIGHT
          表示基本方向依赖于根据 Unicode 双向算法得到的文本中第一个强方向字符的常量。
static int DIRECTION_DEFAULT_RIGHT_TO_LEFT
          表示基本方向依赖于根据 Unicode 双向算法得到的文本中第一个强方向字符的常量。
static int DIRECTION_LEFT_TO_RIGHT
          表示基本方向是从左到右的常量。
static int DIRECTION_RIGHT_TO_LEFT
          表示基本方向是从右到左的常量。
 
构造方法摘要
Bidi(AttributedCharacterIterator paragraph)
          由给定的文本段构造 Bidi。
Bidi(char[] text, int textStart, byte[] embeddings, int embStart, int paragraphLength, int flags)
          由给定的文本、嵌入和方向信息构造 Bidi。
Bidi(String paragraph, int flags)
          由给定的文本段和基本方向构造 Bidi。
 
方法摘要
 boolean baseIsLeftToRight()
          如果基本方向是从左到右,则返回 true。
 Bidi createLineBidi(int lineStart, int lineLimit)
          构造一个 Bidi 对象,表示当前 Bidi 所代表的段落中的一行文本上的双向信息。
 int getBaseLevel()
          返回基本层次(如果是从左到右,则为 0;如果是从右到左,则为 1)。
 int getLength()
          返回该行中文本的长度。
 int getLevelAt(int offset)
          返回偏移位置处的字符的解析层次。
 int getRunCount()
          返回层次运行的数目。
 int getRunLevel(int run)
          返回该行中第 n 次逻辑运行的层次。
 int getRunLimit(int run)
          以该行开始的偏移量返回该行中第 n 次逻辑运行之后的字符索引。
 int getRunStart(int run)
          以该行开始的偏移量返回该行中第 n 次逻辑运行开始时的字符索引。
 boolean isLeftToRight()
          如果该行都是从左到右的文本且基本方向也是从左到右,则返回 true。
 boolean isMixed()
          如果该行既不是从左到右也不是从右到左,则返回 true。
 boolean isRightToLeft()
          如果该行都是从右到左的文本且基本方向也是从右到左,则返回 true。
static void reorderVisually(byte[] levels, int levelStart, Object[] objects, int objectStart, int count)
          根据对象的层次,在数组中将对象重新排序为可视顺序。
static boolean requiresBidi(char[] text, int start, int limit)
          如果指定的文本需要双向解析,则返回 true。
 String toString()
          用于调试时显示双向算法的内部状态。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

字段详细信息

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 双向算法得到的文本中第一个强方向字符的常量。如果没有强方向字符,则基本方向是从右到左。

另请参见:
常量字段值
构造方法详细信息

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 的正值指示嵌入。如果值为 0 或者没有定义,则基本的嵌入层次由假定的基本方向来决定。

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

参数:
paragraph - 具有可选的字符和段落属性信息的文本段。
另请参见:
TextAttribute.BIDI_EMBEDDING, TextAttribute.NUMERIC_SHAPING, TextAttribute.RUN_DIRECTION

Bidi

public Bidi(char[] text,
            int textStart,
            byte[] embeddings,
            int embStart,
            int paragraphLength,
            int flags)
由给定的文本、嵌入和方向信息构造 Bidi。Embeddings 数组可以为 null。如果有的话,其值代表了嵌入层次信息。从 -1 到 -61 的负值指示重写层次的绝对值。从 1 到 61 的正值指示嵌入。如果值为 0,则基本的嵌入层次由假定的基本方向来决定。

参数:
text - 包含了要处理的文本段的一个数组。
textStart - 段落开始的文本数组中的索引。
embeddings - 包含了段落中每个字符的嵌入值的一个数组。在假定不存在外部嵌入信息的情况下可能为空。
embStart - 段落开始的嵌入数组中的索引。
paragraphLength - 在文本和嵌入数组中的段落长度。
flags - 控制算法的标志集合。此算法识别标志 DIRECTION_LEFT_TO_RIGHT、DIRECTION_RIGHT_TO_LEFT、DIRECTION_DEFAULT_LEFT_TO_RIGHT 和 DIRECTION_DEFAULT_RIGHT_TO_LEFT。其他值保留。
方法详细信息

createLineBidi

public Bidi createLineBidi(int lineStart,
                           int lineLimit)
构造一个 Bidi 对象,表示当前 Bidi 所代表的段落中的一行文本上的双向信息。如果整个段落装配在一行中则不需要此调用。

参数:
lineStart - 从段的开始到行的开始的偏移量。
lineLimit - 从段的开始到行的限制的偏移量。

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。

返回:
如果基本方向是从左到右,则返回 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 的 Arabic Presentation Forms 区域的文本假定为已经针对显示进行整形和排序,因此不会导致此函数返回 true。

参数:
text - 包含测试字符的文本
start - 测试字符的范围的开始
limit - 测试字符的范围的限制
返回:
如果该字符范围需要双向解析,则返回 true

reorderVisually

public static void reorderVisually(byte[] levels,
                                   int levelStart,
                                   Object[] objects,
                                   int objectStart,
                                   int count)
根据对象的层次,在数组中将对象重新排序为可视顺序。当您有一个以逻辑顺序表示文本运行的对象集合时(其中每个运行包含同一个层次上的文本),这是一个可用的实用工具函数。假定每一个文本运行具有层次数组中相应的元素(位于 index - objectStart + levelStart)所指示的层次时,对象数组中位于 index 的元素从 objectStart 一直到 objectStart + count 将被重新排序为可视顺序。

参数:
levels - 表示每一个对象双向层次的数组
levelStart - 层次数组中的开始位置
objects - 将被重新排序为可视顺序的对象数组
objectStart - 对象数组中的开始位置
count - 要重新排序的对象数

toString

public String toString()
用于调试时显示双向算法的内部状态。

覆盖:
Object 中的 toString
返回:
该对象的字符串表示形式。