java.lang.Object
java.text.BreakIterator
- 所有已实现的接口:
Cloneable
BreakIterator 类实现了在文本中查找边界位置的方法。 BreakIterator 的实例保持当前位置并扫描文本,返回出现边界的字符的索引。在内部,BreakIterator 使用 CharacterIterator 扫描文本,因此能够扫描实现该协议的任何对象所持有的文本。 StringCharacterIterator 用于扫描传递给 setText 的 String 个对象。
您可以使用此类提供的工厂方法来创建各种类型的中断迭代器的实例。特别是,使用 getWordInstance、getLineInstance、getSentenceInstance 和 getCharacterInstance 创建分别执行单词、行、句子和字符边界分析的 BreakIterator。单个 BreakIterator 只能在一个单元(单词、行、句子等)上工作。您必须对要执行的每个单元边界分析使用不同的迭代器。
行边界分析确定文本字符串在换行时可以在何处断开。该机制正确处理标点符号和带连字符的单词。实际断线还需要考虑可用的线宽,由上位软件处理。
句子边界分析允许选择正确解释数字和缩写内的句点,以及引号和括号等尾随标点符号。
单词边界分析用于搜索和替换功能,以及允许用户通过双击选择单词的文本编辑应用程序。单词选择提供了对单词内和单词后标点符号的正确解释。不属于单词的字符,例如符号或标点符号,两边都有分词符。
字符边界分析允许用户按照他们的预期与字符交互,例如,在文本字符串中移动光标时。字符边界分析提供了通过字符串的正确导航,无论字符是如何存储的。返回的边界可能是补充字符、组合字符序列或连字簇的边界。例如,重音字符可能存储为基本字符和变音符号。用户认为什么是字符可能因语言而异。
- 实现要求:
-
字符边界分析的默认实现符合 Unicode Consortium 的 Extended Grapheme Cluster breaks。有关详细信息,请参阅 Unicode 标准附件 #29 中的字素簇边界部分。
此类的工厂方法返回的
BreakIterator实例仅供自然语言使用,不适用于编程语言文本。然而,可以定义标记编程语言的子类。Examples :
创建和使用文本边界:
按顺序打印每个元素:public static void main(String args[]) { if (args.length == 1) { String stringToExamine = args[0]; //print each word in order BreakIterator boundary = BreakIterator.getWordInstance(); boundary.setText(stringToExamine); printEachForward(boundary, stringToExamine); //print each sentence in reverse order boundary = BreakIterator.getSentenceInstance(Locale.US); boundary.setText(stringToExamine); printEachBackward(boundary, stringToExamine); printFirst(boundary, stringToExamine); printLast(boundary, stringToExamine); } }
以相反的顺序打印每个元素:public static void printEachForward(BreakIterator boundary, String source) { int start = boundary.first(); for (int end = boundary.next(); end != BreakIterator.DONE; start = end, end = boundary.next()) { System.out.println(source.substring(start,end)); } }
打印第一个元素:public static void printEachBackward(BreakIterator boundary, String source) { int end = boundary.last(); for (int start = boundary.previous(); start != BreakIterator.DONE; end = start, start = boundary.previous()) { System.out.println(source.substring(start,end)); } }
打印最后一个元素:public static void printFirst(BreakIterator boundary, String source) { int start = boundary.first(); int end = boundary.next(); System.out.println(source.substring(start,end)); }
在指定位置打印元素:public static void printLast(BreakIterator boundary, String source) { int end = boundary.last(); int start = boundary.previous(); System.out.println(source.substring(start,end)); }
找到下一个词:public static void printAt(BreakIterator boundary, int pos, String source) { int end = boundary.following(pos); int start = boundary.previous(); System.out.println(source.substring(start,end)); }
(BreakIterator.getWordInstance() 返回的迭代器是独一无二的,因为它返回的中断位置并不代表被迭代的事物的开始和结束。也就是说,一个句子中断迭代器返回中断,每个中断代表一个句子的结尾和下一个句子的开头。使用分词迭代器,两个边界之间的字符可能是一个单词,或者它们可能是两个单词之间的标点符号或空格。上面的代码使用一个简单的启发式来确定哪个boundary 是单词的开头:如果这个边界和下一个边界之间的字符至少包含一个字母(这可以是字母、CJK 表意文字、韩文音节、假名字符等),那么文本这个边界和下一个边界之间是一个词;否则,它是词之间的材料。)public static int nextWordStartAfter(int pos, String text) { BreakIterator wb = BreakIterator.getWordInstance(); wb.setText(text); int last = wb.following(pos); int current = wb.next(); while (current != BreakIterator.DONE) { for (int p = last; p < current; p++) { if (Character.isLetter(text.codePointAt(p))) return last; } last = current; current = wb.next(); } return BreakIterator.DONE; } - 自从:
- 1.1
- 参见:
-
字段摘要
字段修饰符和类型Field描述static final int当到达第一个或最后一个文本边界时, previous()、next()、next(int)、preceding(int) 和 following(int) 返回 DONE。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述clone()创建此迭代器的副本abstract intcurrent()返回最近由 next()、next(int)、previous()、first()、last()、following(int) 或 preceding(int) 返回的文本边界的字符索引。abstract intfirst()返回第一个边界。abstract intfollowing(int offset) 返回指定字符偏移量之后的第一个边界。static Locale[]返回所有locale的数组,此类的get*Instance方法可以为其返回本地化实例。static BreakIteratorstatic BreakIteratorgetCharacterInstance(Locale locale) 为给定locale的 字符中断 返回一个新的BreakIterator实例。static BreakIteratorstatic BreakIteratorgetLineInstance(Locale locale) 为给定locale的 换行符 返回一个新的BreakIterator实例。static BreakIteratorstatic BreakIteratorgetSentenceInstance(Locale locale) 为给定locale的 断句 返回一个新的BreakIterator实例。abstract CharacterIteratorgetText()获取正在扫描的文本static BreakIteratorstatic BreakIteratorgetWordInstance(Locale locale) 为给定locale的 断字 返回一个新的BreakIterator实例。booleanisBoundary(int offset) 如果指定的字符偏移量是文本边界,则返回 true。abstract intlast()返回最后一个边界。abstract intnext()返回当前边界之后的边界。abstract intnext(int n) 返回当前边界的第 n 个边界。intpreceding(int offset) 返回指定字符偏移量之前的最后一个边界。abstract intprevious()返回当前边界之前的边界。void设置要扫描的新文本字符串。abstract voidsetText(CharacterIterator newText) 设置要扫描的新文本。
-
字段详细信息
-
DONE
public static final int DONE当到达第一个或最后一个文本边界时, previous()、next()、next(int)、preceding(int) 和 following(int) 返回 DONE。- 参见:
-
-
构造方法详细信息
-
BreakIterator
protected BreakIterator()构造方法。 BreakIterator 是无状态的,没有默认行为。
-
-
方法详情
-
clone
创建此迭代器的副本 -
first
public abstract int first()返回第一个边界。迭代器的当前位置设置为第一个文本边界。- 返回:
- 第一个文本边界的字符索引。
-
last
public abstract int last()返回最后一个边界。迭代器的当前位置设置为最后一个文本边界。- 返回:
- 最后一个文本边界的字符索引。
-
next
public abstract int next(int n) 返回当前边界的第 n 个边界。如果已到达第一个或最后一个文本边界,则返回BreakIterator.DONE并将当前位置设置为第一个或最后一个文本边界,具体取决于到达的是哪个文本边界。否则,迭代器的当前位置设置为新边界。例如,如果迭代器的当前位置是第 m 个文本边界,并且从当前边界到最后一个文本边界还存在三个边界,则 next(2) 调用将返回 m + 2。新的文本位置设置为 (m + 2)th 文本边界。 next(4) 调用将返回BreakIterator.DONE,最后一个文本边界将成为新的文本位置。- 参数:
n- 要返回的边界。值为 0 不执行任何操作。负值移动到先前的边界,正值移动到后面的边界。- 返回:
-
从当前位置开始的第 n 个边界的字符索引,如果到达第一个或最后一个文本边界,则为
BreakIterator.DONE。
-
next
public abstract int next()返回当前边界之后的边界。如果当前边界是最后一个文本边界,则返回BreakIterator.DONE并且迭代器的当前位置不变。否则,迭代器的当前位置设置为当前边界之后的边界。- 返回:
-
下一个文本边界的字符索引,如果当前边界是最后一个文本边界,则为
BreakIterator.DONE。等同于 next(1)。 - 参见:
-
previous
public abstract int previous()返回当前边界之前的边界。如果当前边界是第一个文本边界,则返回BreakIterator.DONE并且迭代器的当前位置不变。否则,迭代器的当前位置设置为当前边界之前的边界。- 返回:
-
前一个文本边界的字符索引,如果当前边界是第一个文本边界,则为
BreakIterator.DONE。
-
following
public abstract int following(int offset) 返回指定字符偏移量之后的第一个边界。如果指定的偏移量等于最后一个文本边界,则返回BreakIterator.DONE并且迭代器的当前位置不变。否则,迭代器的当前位置设置为返回的边界。返回的值总是大于偏移量或值BreakIterator.DONE。- 参数:
offset- 开始扫描的字符偏移量。- 返回:
-
指定偏移量之后的第一个边界,如果传入最后一个文本边界作为偏移量,则为
BreakIterator.DONE。 - 抛出:
IllegalArgumentException- 如果指定的偏移量小于第一个文本边界或大于最后一个文本边界。
-
preceding
public int preceding(int offset) 返回指定字符偏移量之前的最后一个边界。如果指定的偏移量等于第一个文本边界,则返回BreakIterator.DONE并且迭代器的当前位置不变。否则,迭代器的当前位置设置为返回的边界。返回的值始终小于偏移量或值BreakIterator.DONE。- 参数:
offset- 开始扫描的字符偏移量。- 返回:
-
指定偏移量之前的最后一个边界,如果第一个文本边界作为偏移量传入,则为
BreakIterator.DONE。 - 抛出:
IllegalArgumentException- 如果指定的偏移量小于第一个文本边界或大于最后一个文本边界。- 自从:
- 1.2
-
isBoundary
public boolean isBoundary(int offset) 如果指定的字符偏移量是文本边界,则返回 true。- 参数:
offset- 要检查的字符偏移量。- 返回:
true如果“偏移量”是边界位置,false否则。- 抛出:
IllegalArgumentException- 如果指定的偏移量小于第一个文本边界或大于最后一个文本边界。- 自从:
- 1.2
-
current
public abstract int current()返回最近由 next()、next(int)、previous()、first()、last()、following(int) 或 preceding(int) 返回的文本边界的字符索引。如果这些方法中的任何一个因为到达第一个或最后一个文本边界而返回BreakIterator.DONE,它会根据到达的文本边界返回第一个或最后一个文本边界。- 返回:
- 从上述方法返回的文本边界,第一个或最后一个文本边界。
- 参见:
-
getText
获取正在扫描的文本- 返回:
- 正在扫描的文本
-
setText
设置要扫描的新文本字符串。当前扫描位置重置为 first()。- 参数:
newText- 要扫描的新文本。
-
setText
设置要扫描的新文本。当前扫描位置重置为 first()。- 参数:
newText- 要扫描的新文本。
-
getWordInstance
- 返回:
- 一个用于断字的迭代器
-
getWordInstance
为给定locale的 断字 返回一个新的BreakIterator实例。- 参数:
locale- 所需的locale- 返回:
- 一个用于断字的迭代器
- 抛出:
NullPointerException- 如果locale为空
-
getLineInstance
- 返回:
- 换行符的中断迭代器
-
getLineInstance
为给定locale的 换行符 返回一个新的BreakIterator实例。- 参数:
locale- 所需的locale- 返回:
- 换行符的中断迭代器
- 抛出:
NullPointerException- 如果locale为空
-
getCharacterInstance
- 返回:
- 字符中断的中断迭代器
-
getCharacterInstance
为给定locale的 字符中断 返回一个新的BreakIterator实例。- 参数:
locale- 所需的locale- 返回:
- 字符中断的中断迭代器
- 抛出:
NullPointerException- 如果locale为空
-
getSentenceInstance
- 返回:
- 用于句子中断的中断迭代器
-
getSentenceInstance
为给定locale的 断句 返回一个新的BreakIterator实例。- 参数:
locale- 所需的locale- 返回:
- 用于句子中断的中断迭代器
- 抛出:
NullPointerException- 如果locale为空
-
getAvailableLocales
返回所有locale的数组,此类的get*Instance方法可以为其返回本地化实例。返回的数组表示 Java 运行时和已安装的BreakIteratorProvider实现支持的locale的联合。至少,返回的数组必须包含一个等于Locale.ROOT的Locale实例和一个等于Locale.US的Locale实例。- 返回:
-
本地化
BreakIterator实例可用的区域设置数组。
-