JavaTM 2 Platform
Standard Ed. 6

java.text
類別 BreakIterator

java.lang.Object
  繼承者 java.text.BreakIterator
所有已實作的介面:
Cloneable

public abstract class BreakIterator
extends Object
implements Cloneable

BreakIterator 類別實作用於尋找文本中邊界位置的方法。BreakIterator 的實例維護一個當前位置並掃瞄文本,同時返回邊界出現處的字元索引。在內部,BreakIterator 使用 CharacterIterator 掃瞄文本,因此能掃瞄實作該協議的任何物件所保存的文本。StringCharacterIterator 用於掃瞄傳遞給 setTextString 物件。

可以用此類別提供的處理器方法創建不同型別的分解迭代器實例。具體來說,可以使用 getWordIteratorgetLineIteratorgetSentenceIteratorgetCharacterIterator 分別創建執行單詞、行、句子和字元邊界分析的 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
 

欄位詳細資訊

DONE

public static final int DONE
在已經到達第一個或最後一個文本邊界時,previous()、next()、next(int)、preceding(int) 和 following(int) 將返回 DONE。

另請參見:
常數欄位值
建構子詳細資訊

BreakIterator

protected BreakIterator()
建構子。BreakIterator 是無狀態的並且沒有任何預設行為。

方法詳細資訊

clone

public Object clone()
創建此迭代器的副本。

覆寫:
類別 Object 中的 clone
返回:
此迭代器的副本。
另請參見:
Cloneable

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) 個文本邊界。next(4) 調用將返回 BreakIterator.DONE,而最後一個文本邊界將成為新的文本位置。

參數:
n - 要返回的邊界。0 值表示不執行任何操作。負值移向前面的邊界,正值移向後面的邊界。
返回:
從當前位置起第 n 個邊界的字元索引;如果已經到達第一個或最後一個文本邊界,則返回 BreakIterator.DONE

next

public abstract int next()
返回當前邊界的後一個邊界。如果當前邊界是最後一個文本邊界,則返回 BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為當前邊界的後一個邊界。

返回:
下一個文本邊界的字元索引;如果當前邊界是最後一個文本邊界,則返回 BreakIterator.DONE。等效於 next(1)。
另請參見:
next(int)

previous

public abstract int previous()
返回當前邊界的前一個邊界。如果當前邊界是第一個文本邊界,則返回 BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為當前邊界的前一個邊界。

返回:
前一個文本邊界的字元索引;如果當前邊界是第一個文本邊界,則返回 BreakIterator.DONE

following

public abstract int following(int offset)
返回指定字元偏移量後面的第一個邊界。如果指定偏移量等於最後一個文本邊界,則返回 BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為返回的邊界。返回的值總是大於 offset,或者為值 BreakIterator.DONE

參數:
offset - 開始進行掃瞄的字元偏移量。
返回:
指定偏移量之後的第一個邊界;如果傳入最後一個文本邊界作為偏移量,則返回 BreakIterator.DONE
拋出:
IllegalArgumentException - 如果指定偏移量小於第一個文本邊界或者大於最後一個文本邊界。

preceding

public int preceding(int offset)
返回指定字元偏移量前面的最後一個邊界。如果指定偏移量等於第一個文本邊界,則返回 BreakIterator.DONE,迭代器的當前位置不變。否則,迭代器的當前位置被設置為返回的邊界。返回的值總是小於 offset,或者為值 BreakIterator.DONE

參數:
offset - 開始進行掃瞄的字元偏移量。
返回:
指定偏移量之前的最後一個邊界;如果傳入第一個文本邊界作為偏移量,則返回 BreakIterator.DONE
拋出:
IllegalArgumentException - 如果指定偏移量小於第一個文本邊界或者大於最後一個文本邊界。
從以下版本開始:
1.2

isBoundary

public boolean isBoundary(int offset)
如果指定字元偏移量是一個文本邊界,則返回 true。

參數:
offset - 要檢查的字元偏移量。
返回:
如果 "offset" 是一個邊界位置,則返回 true;否則返回 false
從以下版本開始:
1.2

current

public abstract int current()
返回最近由 next()、next(int)、previous()、first()、last()、following(int) 或 preceding(int) 返回的文本邊界的字元索引。如果這些方法因為到達第一個或最後一個文本邊界而返回 BreakIterator.DONE,則返回第一個或最後一個文本邊界,具體取決於到達的是哪一個邊界。

返回:
從上述方法返回的文本邊界,即第一個或最後一個文本邊界。 text boundary.
另請參見:
next(), next(int), previous(), first(), last(), following(int), preceding(int)

getText

public abstract CharacterIterator getText()
獲取被掃瞄的文本

返回:
被掃瞄的文本。

setText

public void setText(String newText)
設置要被掃瞄的新文本字元串。當前掃瞄位置被重置為 first()。

參數:
newText - 要掃瞄的新文本。

setText

public abstract void setText(CharacterIterator newText)
設置一個新文本用於掃瞄。當前掃瞄位置被重置為 first()。

參數:
newText - 要掃瞄的新文本。

getWordInstance

public static BreakIterator getWordInstance()
返回一個用於預設語言環境單詞分解的新 BreakIterator 實例。

返回:
用於單詞分解的分解迭代器

getWordInstance

public static BreakIterator getWordInstance(Locale locale)
返回一個用於給定語言環境單詞分解的新 BreakIterator 實例。

參數:
locale - 所需的語言環境
返回:
用於單詞分解的分解迭代器
拋出:
NullPointerException - 如果 locale 為 null

getLineInstance

public static BreakIterator getLineInstance()
返回一個用於預設語言環境行分解的新 BreakIterator 實例。

返回:
用於行分解的分解迭代器

getLineInstance

public static BreakIterator getLineInstance(Locale locale)
返回一個用於給定語言環境行分解的新 BreakIterator 實例。

參數:
locale - 所需的語言環境
返回:
用於行分解的分解迭代器
拋出:
NullPointerException - 如果 locale 為 null

getCharacterInstance

public static BreakIterator getCharacterInstance()
返回一個用於預設語言環境字元分解的新 BreakIterator 實例。

返回:
用於字元分解的分解迭代器

getCharacterInstance

public static BreakIterator getCharacterInstance(Locale locale)
返回一個用於給定語言環境字元分解的新 BreakIterator 實例。

參數:
locale - 所需的語言環境
返回:
用於字元分解的分解迭代器
拋出:
NullPointerException - 如果 locale 為 null

getSentenceInstance

public static BreakIterator getSentenceInstance()
返回一個用於預設語言環境句子分解的新 BreakIterator 實例。

返回:
用於句子分解的分解迭代器

getSentenceInstance

public static BreakIterator getSentenceInstance(Locale locale)
返回一個用於給定語言環境句子分解的新 BreakIterator 實例。

參數:
locale - 所需的語言環境
返回:
用於句子分解的分解迭代器
拋出:
NullPointerException - 如果 locale 為 null

getAvailableLocales

public static Locale[] getAvailableLocales()
返回一個陣列,它由此類別的 getInstance 方法可為之返回本地化實例的所有語言環境組成。返回的陣列表示 Java 運行時所支持的語言環境和已安裝的 BreakIteratorProvider 實作所支持的語言環境的並集。該陣列至少必須包含一個等於 Locale.USLocale 實例。

返回:
一個語言環境陣列,可獲得這些語言環境的本地化 BreakIterator 實例。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only