API 參考:BreakIterator
BreakIterator 類別用於定位文字中的邊界(字元、單詞、行、句子)。如果你不使用高階的 Paragraph API,它對於實作文字選取、游標移動和換行邏輯至關重要。
建立
Skija 提供了工廠方法來建立不同邊界類型的迭代器。你可以選擇性地指定語言環境(例如 "en-US"、"ja-JP")。
java
// 單詞邊界(用於雙擊選取)
BreakIterator words = BreakIterator.makeWordInstance();
// 句子邊界(用於三擊選取)
BreakIterator sentences = BreakIterator.makeSentenceInstance(Locale.GERMANY.toLanguageTag());
// 行邊界(用於換行)
BreakIterator lines = BreakIterator.makeLineInstance();
// 字元邊界(用於游標移動,處理字素叢集)
BreakIterator chars = BreakIterator.makeCharacterInstance();使用方式
- 設定文字:指派你想要分析的文字。
- 迭代:使用
next()、previous()、first()、last()來導航邊界。
java
String text = "Hello, world! 🌍";
BreakIterator iter = BreakIterator.makeWordInstance();
iter.setText(text);
int start = iter.first();
for (int end = iter.next(); end != BreakIterator.DONE; start = end, end = iter.next()) {
// 檢查此範圍是否實際為單詞(而非空白/標點符號)
if (iter.getRuleStatus() != BreakIterator.WORD_NONE) {
String word = text.substring(start, end);
System.out.println("Word: " + word);
}
}導航方法
first():移動到文字開頭。返回 0。last():移動到文字結尾。返回字串長度。next():移動到下一個邊界。返回偏移量或DONE。previous():移動到上一個邊界。返回偏移量或DONE。following(offset):移動到給定偏移量之後的第一個邊界。preceding(offset):移動到給定偏移量之前的最後一個邊界。isBoundary(offset):如果偏移量是邊界則返回 true。
規則狀態
對於單詞迭代器,getRuleStatus() 會告訴你當前邊界與上一個邊界之間是什麼類型的「單詞」。
WORD_NONE:空白、標點符號或符號。WORD_NUMBER:數字。WORD_LETTER:字母(非 CJK)。WORD_KANA:平假名/片假名。WORD_IDEO:CJK 表意文字。