public abstract class BreakIterator extends Object implements Cloneable
BreakIterator
类实现了在文本中查找边界位置的方法。
BreakIterator的BreakIterator
保持当前位置并扫描返回边界发生的字符索引的文本。
在内部, BreakIterator
扫描文本使用CharacterIterator
,并且因此能够扫描通过实现协议的任何对象保存文本。
A StringCharacterIterator
用于扫描传递给setText
String
对象。
您可以使用此类提供的工厂方法来创建各种类型的中断迭代器的实例。 尤其是,使用getWordInstance
, getLineInstance
, getSentenceInstance
和getCharacterInstance
创造BreakIterator
s表示分别执行字,行,句子和字符边界分析。 单个BreakIterator
只能在一个单元上工作(单词,行,句子等)。 对于您希望执行的每个单位边界分析,必须使用不同的迭代器。
行边界分析确定在换行时文本字符串可以被打破的位置。 该机制正确处理标点符号和连字符。 实际断线需要考虑可用线宽,并由更高级别的软件处理。
句子边界分析允许选择正确解释数字和缩写中的句点,以及尾随标点符号(如引号和括号)。
Word边界分析由搜索和替换功能以及文本编辑应用程序使用,允许用户双击选择单词。 词选择提供正确解释单词内和之后的标点符号。 不是单词的一部分的字符,如符号或标点符号,双方都有单词。
字符边界分析允许用户与他们期望的字符进行交互,例如,当通过文本字符串移动光标时。 字符边界分析提供了通过字符串的正确导航,而不管字符的存储方式如何。 返回的边界可以是补充字符,组合字符序列或连字符集的边界。 例如,重音字符可能存储为基本字符和变音标记。 用户认为是一个字符的用户可能因语言而异。
该BreakIterator
由此类的工厂方法返回的情况下,旨在与自然的语言,而不用于编程语言文字的使用。 然而,可以定义标记编程语言的子类。
示例 :
创建和使用文本边界:
按顺序打印每个元素: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)); }
(The iterator returned by BreakIterator.getWordInstance() is unique in that the break positions it returns don't represent both the start and end of the thing being iterated over. That is, a sentence-break iterator returns breaks that each represent the end of one sentence and the beginning of the next. With the word-break iterator, the characters between two boundaries might be a word, or they might be the punctuation or whitespace between two words. The above code uses a simple heuristic to determine which boundary is the beginning of a word: If the characters between this boundary and the next boundary include at least one letter (this can be an alphabetical letter, a CJK ideograph, a Hangul syllable, a Kana character, etc.), then the text between this boundary and the next is a word; otherwise, it's the material between words.)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; }
CharacterIterator
Modifier and Type | Field and Description |
---|---|
static int |
DONE
当达到第一个或最后一个文本边界时,DONE将返回previous(),next(),next(int),previous(int)和after(int)。
|
Modifier | Constructor and Description |
---|---|
protected |
BreakIterator()
构造函数
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
创建一个这个迭代器的副本
|
abstract int |
current()
返回最近由next(),next(int),previous(),first(),last(),following(int)或previous(int)返回的文本边界的字符索引。
|
abstract int |
first()
返回第一个边界。
|
abstract int |
following(int offset)
返回指定字符偏移后的第一个边界。
|
static Locale[] |
getAvailableLocales()
返回一个所有区域的数组,这个类的
get*Instance 方法可以返回本地化的实例。
|
static BreakIterator |
getCharacterInstance()
|
static BreakIterator |
getCharacterInstance(Locale locale)
为给定的语言环境返回一个新的
BreakIterator 实例
character breaks 。
|
static BreakIterator |
getLineInstance()
|
static BreakIterator |
getLineInstance(Locale locale)
返回一个新
BreakIterator 例如
line breaks给定语言环境。
|
static BreakIterator |
getSentenceInstance()
|
static BreakIterator |
getSentenceInstance(Locale locale)
返回一个新
BreakIterator 例如
sentence breaks给定语言环境。
|
abstract CharacterIterator |
getText()
获取正在扫描的文本
|
static BreakIterator |
getWordInstance()
|
static BreakIterator |
getWordInstance(Locale locale)
返回一个新
BreakIterator 例如
word breaks给定语言环境。
|
boolean |
isBoundary(int offset)
如果指定的字符偏移量是文本边界,则返回true。
|
abstract int |
last()
返回最后一个边界。
|
abstract int |
next()
返回当前边界之后的边界。
|
abstract int |
next(int n)
从当前边界返回第n个边界。
|
int |
preceding(int offset)
返回指定字符偏移量之前的最后一个边界。
|
abstract int |
previous()
返回当前边界之前的边界。
|
abstract void |
setText(CharacterIterator newText)
设置一个新文本进行扫描。
|
void |
setText(String newText)
设置要扫描的新文本字符串。
|
public static final int DONE
public abstract int first()
public abstract int last()
public abstract int next(int n)
BreakIterator.DONE
,并且根据到达哪一个文本边界将当前位置设置为第一个或最后一个文本边界。
否则,迭代器的当前位置被设置为新的边界。
例如,如果迭代器的当前位置是第m个文本边界,并且从当前边界到最后一个文本边界存在三个边界,则下一个(2)调用将返回m + 2。新的文本位置设置为(m + 2)个文本边界。
下一个(4)调用将返回BreakIterator.DONE
,最后一个文本边界将成为新的文本位置。
n
- 要返回的边界。
0值不起作用。
负值移动到上一个边界,正值移动到稍后的边界。
BreakIterator.DONE
。
public abstract int next()
BreakIterator.DONE
,迭代器的当前位置不变。
否则,迭代器的当前位置被设置为当前边界之后的边界。
BreakIterator.DONE
。
相当于下一(1)。
next(int)
public abstract int previous()
BreakIterator.DONE
,迭代器的当前位置不变。
否则,迭代器的当前位置被设置为当前边界之前的边界。
BreakIterator.DONE
。
public abstract int following(int offset)
BreakIterator.DONE
,迭代器的当前位置不变。
否则,迭代器的当前位置被设置为返回的边界。
返回的值始终大于偏移量或值BreakIterator.DONE
。
offset
- 开始扫描的字符偏移量。
BreakIterator.DONE
如果最后一个文本边界作为偏移传入。
IllegalArgumentException
- 如果指定的偏移小于第一个文本边界或大于最后一个文本边界。
public int preceding(int offset)
BreakIterator.DONE
,迭代器的当前位置不变。
否则,迭代器的当前位置被设置为返回的边界。
返回的值始终小于偏移量或值BreakIterator.DONE
。
offset
- 开始扫描的字符偏移量。
BreakIterator.DONE
。
IllegalArgumentException
- 如果指定的偏移小于第一个文本边界或大于最后一个文本边界。
public boolean isBoundary(int offset)
offset
- 要检查的字符偏移量。
true
如果“偏移”是边界位置,
false
false。
IllegalArgumentException
- 如果指定的偏移小于第一个文本边界或大于最后一个文本边界。
public abstract int current()
BreakIterator.DONE
,因为已达到第一个或最后一个文本边界,则返回第一个或最后一个文本边界,具体取决于到达哪一个。
next()
,
next(int)
,
previous()
,
first()
,
last()
,
following(int)
,
preceding(int)
public abstract CharacterIterator getText()
public void setText(String newText)
newText
- 要扫描的新文本。
public abstract void setText(CharacterIterator newText)
newText
- 要扫描的新文本。
public static BreakIterator getWordInstance()
public static BreakIterator getWordInstance(Locale locale)
BreakIterator
例如
word breaks给定语言环境。
locale
- 所需的语言环境
NullPointerException
- 如果
locale
为空
public static BreakIterator getLineInstance()
public static BreakIterator getLineInstance(Locale locale)
BreakIterator
例如
line breaks给定语言环境。
locale
- 所需的语言环境
NullPointerException
- 如果
locale
为空
public static BreakIterator getCharacterInstance()
public static BreakIterator getCharacterInstance(Locale locale)
BreakIterator
例如
character breaks给定语言环境。
locale
- 所需的语言环境
NullPointerException
- 如果
locale
为空
public static BreakIterator getSentenceInstance()
public static BreakIterator getSentenceInstance(Locale locale)
BreakIterator
例如
sentence breaks给定语言环境。
locale
- 所需的语言环境
NullPointerException
- 如果
locale
为空