|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjava.text.BreakIterator
public abstract class BreakIterator
BreakIterator 類別實作用於尋找文本中邊界位置的方法。BreakIterator 的實例維護一個當前位置並掃瞄文本,同時返回邊界出現處的字元索引。在內部,BreakIterator 使用 CharacterIterator 掃瞄文本,因此能掃瞄實作該協議的任何物件所保存的文本。StringCharacterIterator 用於掃瞄傳遞給 setText 的 String 物件。
可以用此類別提供的處理器方法創建不同型別的分解迭代器實例。具體來說,可以使用 getWordIterator、getLineIterator、getSentenceIterator 和 getCharacterIterator 分別創建執行單詞、行、句子和字元邊界分析的 BreakIterator。一個 BreakIterator 只能在一個單元(單詞、行、句子等)上工作。對於希望執行的每個單元邊界分析,必須使用不同的迭代器。
行邊界分析決定了文本字元串換行時如何分解。這種機制能正確處理標點符號和帶連字元的單詞。實際的行分解還需要考慮可用的行寬,是通過較高層級別的軟體處理的。
句子邊界分析使選中內容能正確解釋數字和縮寫中的句點,以及結尾的標點符號,如引號和圓括號。
單詞邊界分析用於搜尋和替換功能,以及允許使用者使用鼠標雙擊選擇單詞的文本編輯應用程序。單詞選擇能正確地解釋單詞內及單詞後的標點符號。符號或者標點符號之類別不屬於單詞的字元在其兩端都會分解。
字元邊界分析允許使用者以期望的方式與字元交互,比如,將鼠標移過一個文本字元串。字元邊界分析提供通過字元串的正確導航,而無需考慮字元如何存儲。返回的邊界可能是增補字元的邊界,由字元序列或連字集群組成。例如,一個強調字元可能存儲為一個基本字元和一個可區別的標記。被使用者視為字元的內容隨語言不同而不同。
由此類別的處理器方法返回的 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));
}
尋找下一個單詞:
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;
}
(BreakIterator.getWordInstance() 返回的迭代器是唯一的,因為它所返回的分解位置不表示迭代內容的開始和結束。也就是說,一個句子分解迭代器返回的每一個分解表示一個句子的結束和下一個句子的開始。使用單詞分解迭代器,兩個邊界之間的字元可能是一個單詞,也可能是兩個單詞之間的標點符號或空格。以上程式碼使用一個簡單的範例來確定哪一個邊界是單詞的開始:如果此邊界和下一邊界之間的字元至少包含了一個字母(可以是字母表中的字母、中日韓 (CJK) 表意字元、韓文音節、日語假名字元等等),那麼此邊界和下一邊界之間的文本就是一個單詞;否則,它就是單詞之間的內容。)
CharacterIterator| 欄位摘要 | |
|---|---|
static int |
DONE
在已經到達第一個或最後一個文本邊界時,previous()、next()、next(int)、preceding(int) 和 following(int) 將返回 DONE。 |
| 建構子摘要 | |
|---|---|
protected |
BreakIterator()
建構子。 |
| 方法摘要 | |
|---|---|
Object |
clone()
創建此迭代器的副本。 |
abstract int |
current()
返回最近由 next()、next(int)、previous()、first()、last()、following(int) 或 preceding(int) 返回的文本邊界的字元索引。 |
abstract int |
first()
返回第一個邊界。 |
abstract int |
following(int offset)
返回指定字元偏移量後面的第一個邊界。 |
static Locale[] |
getAvailableLocales()
返回一個陣列,它由此類別的 getInstance 方法可為之返回本地化實例的所有語言環境組成。 |
static BreakIterator |
getCharacterInstance()
返回一個用於預設語言環境字元分解的新 BreakIterator 實例。 |
static BreakIterator |
getCharacterInstance(Locale locale)
返回一個用於給定語言環境字元分解的新 BreakIterator 實例。 |
static BreakIterator |
getLineInstance()
返回一個用於預設語言環境行分解的新 BreakIterator 實例。 |
static BreakIterator |
getLineInstance(Locale locale)
返回一個用於給定語言環境行分解的新 BreakIterator 實例。 |
static BreakIterator |
getSentenceInstance()
返回一個用於預設語言環境句子分解的新 BreakIterator 實例。 |
static BreakIterator |
getSentenceInstance(Locale locale)
返回一個用於給定語言環境句子分解的新 BreakIterator 實例。 |
abstract CharacterIterator |
getText()
獲取被掃瞄的文本 |
static BreakIterator |
getWordInstance()
返回一個用於預設語言環境單詞分解的新 BreakIterator 實例。 |
static BreakIterator |
getWordInstance(Locale locale)
返回一個用於給定語言環境單詞分解的新 BreakIterator 實例。 |
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)
設置要被掃瞄的新文本字元串。 |
| 從類別 java.lang.Object 繼承的方法 |
|---|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 欄位詳細資訊 |
|---|
public static final int DONE
| 建構子詳細資訊 |
|---|
protected BreakIterator()
| 方法詳細資訊 |
|---|
public Object clone()
Object 中的 cloneCloneablepublic abstract int first()
public abstract int last()
public abstract int next(int n)
BreakIterator.DONE,當前位置被設置為第一個文本邊界或最後一個文本邊界,具體取決於所到達的邊界。否則,迭代器的當前位置被設置為新邊界。例如,如果迭代器的當前位置是第 m 個文本邊界,並且從當前文本邊界到最後一個文本邊界之間還有三個邊界,則 next(2) 調用將返回 m + 2。新文本位置被設置為第 (m + 2) 個文本邊界。next(4) 調用將返回 BreakIterator.DONE,而最後一個文本邊界將成為新的文本位置。
n - 要返回的邊界。0 值表示不執行任何操作。負值移向前面的邊界,正值移向後面的邊界。
BreakIterator.DONE。public abstract int next()
BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為當前邊界的後一個邊界。
BreakIterator.DONE。等效於 next(1)。next(int)public abstract int previous()
BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為當前邊界的前一個邊界。
BreakIterator.DONE。public abstract int following(int offset)
BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為返回的邊界。返回的值總是大於 offset,或者為值 BreakIterator.DONE。
offset - 開始進行掃瞄的字元偏移量。
BreakIterator.DONE。
IllegalArgumentException - 如果指定偏移量小於第一個文本邊界或者大於最後一個文本邊界。public int preceding(int offset)
BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為返回的邊界。返回的值總是小於 offset,或者為值 BreakIterator.DONE。
offset - 開始進行掃瞄的字元偏移量。
BreakIterator.DONE。
IllegalArgumentException - 如果指定偏移量小於第一個文本邊界或者大於最後一個文本邊界。public boolean isBoundary(int offset)
offset - 要檢查的字元偏移量。
true;否則返回 false。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()
BreakIterator 實例。
public static BreakIterator getWordInstance(Locale locale)
BreakIterator 實例。
locale - 所需的語言環境
NullPointerException - 如果 locale 為 nullpublic static BreakIterator getLineInstance()
BreakIterator 實例。
public static BreakIterator getLineInstance(Locale locale)
BreakIterator 實例。
locale - 所需的語言環境
NullPointerException - 如果 locale 為 nullpublic static BreakIterator getCharacterInstance()
BreakIterator 實例。
public static BreakIterator getCharacterInstance(Locale locale)
BreakIterator 實例。
locale - 所需的語言環境
NullPointerException - 如果 locale 為 nullpublic static BreakIterator getSentenceInstance()
BreakIterator 實例。
public static BreakIterator getSentenceInstance(Locale locale)
BreakIterator 實例。
locale - 所需的語言環境
NullPointerException - 如果 locale 為 nullpublic static Locale[] getAvailableLocales()
getInstance 方法可為之返回本地化實例的所有語言環境組成。返回的陣列表示 Java 運行時所支持的語言環境和已安裝的 BreakIteratorProvider 實作所支持的語言環境的並集。該陣列至少必須包含一個等於 Locale.US 的 Locale 實例。
BreakIterator 實例。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。