Java2 类库解析 — java.text.AttributedCharacterIterator

来源:田浩然上传资料 / 电子书 / java / Java2 类库 / 20.pdf(第 20 章节选,7 页)

核心内容

本篇是《Java2 类库解析》一书对 java.text.AttributedCharacterIterator 接口的逐条解析,属于 Java2 文本处理(java.text 包)部分。

接口定位

public interface AttributedCharacterIterator extends CharacterIterator
  • 为迭代程序定义”属性文本”的访问方法:文本由 Unicode 字符 + 相关属性信息组成。
  • 支持检索:字符、属性关键字与值、属性的起始/结束字符下标。
  • 返回的字符受迭代器 range 限制;属性信息受”包含当前字符的场所(field)“限制。
  • 创建方式:调用文本存储对象的 getIterator()。java.text 包提供的实现是 AttributedString(基于 String);也可自定义其他字符存储类型。

属性(Attribute)概念

  • 属性是附加到文本上以丰富/标识其特征的信息:语言、发音、字体、大小、样式、对齐、颜色、场指示、上标、宽度等。
  • 属性 = 关键字/值对:关键字必须是 AttributedCharacterIterator.Attribute 类型,值可为任意对象或 null;特殊关键字要求特殊类型的值。
  • 一个字符位置可关联多个不同关键字的属性;每个关键字只对应一个值。

属性场(Attribute Field)

  • 场 = 属性值保持不变的最大文本范围。
  • getRunStart(Attribute) / getRunLimit(Attribute) 系列方法:返回当前字符所在属性场的起点/终点下标(基于 0 的字符位置)。
  • 多重载形式:针对全部属性、单个属性关键字、属性关键字集合三种粒度。关键字集合形式返回”所有属性都未改变”的最大文本范围。

可行动点

  • 做富文本编辑器/语法加亮/输入法候选串渲染时,用 AttributedString + AttributedCharacterIterator 携带样式信息,而非并行维护多个区间表。
  • 遍历模式:first(); while (current != DONE) { getRunLimit(...); setIndex(...) } 按属性场跳跃式推进,避免逐字符判断样式变化。

关联