語言

BreakIterator 類別

定義

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

[Android.Runtime.Register("android/icu/text/BreakIterator", ApiSince=24, DoNotGenerateAcw=true)]
public abstract class BreakIterator : Java.Lang.Object, IDisposable, Java.Lang.ICloneable
[<Android.Runtime.Register("android/icu/text/BreakIterator", ApiSince=24, DoNotGenerateAcw=true)>]
type BreakIterator = class
    inherit Object
    interface ICloneable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
繼承
BreakIterator
屬性
實作

備註

<強力>[加護病房增強]</強重> 加護病房取代 java.text.BreakIterator. ICU特有的方法、領域及其他功能標示為「<強力>[重症監護室]</強力>」。

一個能在文字中定位邊界的類別。 此類別定義了一套物件的協定,用於根據一組標準將自然語言文本分割。 例如,可以提供 BreakIterator 的實例或子類別,將一段文字拆解成單字、句子或邏輯字元,並依照某語言或語言群的慣例。

我們提供五種內建的 BreakIterator: <ul><li>getTitleInstance() 回傳一個 BreakIterator,用來定位標題中斷之間的邊界。 <li>getSentenceInstance() 回傳一個 BreakIterator,用來定位句子之間的邊界。 例如,這對於三連擊選擇非常有幫助。 <li>getWordInstance() 回傳一個 BreakIterator,用來定位字詞間的邊界。 這對於雙擊選取或「尋找整字」搜尋非常有用。 這種類型的 BreakIterator 確保每個法律詞的開頭和結尾都有邊界位置。 (數字也算作詞彙。)空白和標點符號與真實詞彙是分開的。 <li>getLineInstance() 會回傳一個 BreakIterator,該處會定位文字編輯器允許繞行的位置。 這類似於單字分隔,但不完全相同:標點符號和空白通常會保留在單字上(例如你不希望一行以空格開頭),而某些特殊字元可以強制某個位置被視為換行位置,或阻止該位置成為換行位置。 <li>getCharacterInstance() 會回傳一個 BreakIterator,用來定位邏輯字元之間的邊界。 由於 Unicode 編碼的結構,一個邏輯字元可以內部儲存為多個 Unicode 碼點。 (例如,帶有變音符號的 A 可以儲存為 a 後接一個獨立的合併變音符號,但使用者仍會將其視為一個字元。)此迭代器允許各種程序(尤其是文字編輯器)將使用者視為字元的文字單位視為字元,而非電腦視為「字元」的文字單位。</ul> 文本邊界位置依據 Unicode 標準附錄 #29、文字邊界及 Unicode 標準附錄 #14 換行屬性中描述的規則來確定。 這些資料可於 http://www.unicode.org/reports/tr14/ 以下網站取得 http://www.unicode.org/reports/tr29/.

BreakIterator 的介面採用「迭代器」模型(因此得名),意即它有「當前位置」的概念,以及像 first()、last()、next()、before() 等方法來更新當前位置。 所有分斷迭代器都維持以下不變式: <ul><li>文本的開頭與結尾始終被視為邊界位置。 <li>迭代器的當前位置總是邊界位置(隨機存取方法將迭代器移動到指定位置之前或之後最近的邊界位置 ,而非 指定位置)。 <li>DONE 用作標記,表示迭代停止。 DONE 僅在當前位置為文字結尾且使用者呼叫 next() 時回傳,或當前位置為文字開頭且使用者呼叫 prevreious()。 <li>Break 位置由後面角色的位置編號。 因此,在正常情況下,第一個字元前的位置為 0,第一個字元後的位置為 1,最後一個字元後的位置為 1 加上字串長度。 <li>客戶端可以隨意改變迭代器的位置或其分析的文本,但無法改變行為本身。 若使用者想要不同的行為,他必須實例化一個新的迭代器。</ul>

BreakIterator 透過 CharacterIterator 存取其分析的文本,這使得任何提供 CharacterIterator 介面的文本儲存載體中都能使用 BreakIterator 來分析文本。

<b>注意:</b> 某些類型的 BreakIterator 建立可能耗時較長,且系統目前並未快取 BreakIterator 的實例。 為了達到最佳效能,建議盡可能長時間保留 BreakIterator 實例。 例如,在換行文件時,不要為每行建立或銷毀新的 BreakIterator。 為整個文件(或你要換行的文字區段)建立一個 break 迭代器,用它來完成整個文字的包裝工作。

<強而有力>的例子</強力>:

建立與使用文字邊界 <blockquote>

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);
                 }
            }

</區塊引用>

請依序 <列印每個元素 blockquote>

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));
                }
            }

</區塊引用>

將每個元素以反向順序 <列印 blockquote>

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));
            }

</區塊引用>

在指定位置 <列印元素 blockquote>

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 wordStart = wb.following(pos);
                for (;;) {
                    int wordLimit = wb.next();
                    if (wordLimit == BreakIterator.DONE) {
                        return BreakIterator.DONE;
                    }
                    int wordStatus = wb.getRuleStatus();
                    if (wordStatus != BreakIterator.WORD_NONE) {
                        return wordStart;
                    }
                    wordStart = wordLimit;
                 }
            }

回傳的 #getWordInstance 迭代器獨特之處在於它回傳的中斷位置並不代表被迭代事物的開始和結束。 也就是說,句子斷行迭代器回傳的斷點,分別代表一個句子的結尾和下一個句子的開頭。 使用詞分隔迭代器時,兩個邊界之間的字元可能是單字,也可能是兩個字之間的標點符號或空白。 上述程式碼用 #getRuleStatus 來識別並忽略與標點符號或其他非字元相關的邊界。 </區塊引用>

Java 文件 android.icu.text.BreakIterator。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
BreakIterator()

預設建構函式。

BreakIterator(IntPtr, JniHandleOwnership)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

欄位

名稱 Description
Done

DONE 由 previous() 和 next() 回傳,當所有有效邊界都回傳完畢後。

KindCharacter
已淘汰.

<強壯>[加護病房]</強力>

KindLine
已淘汰.

<強壯>[加護病房]</強力>

KindSentence
已淘汰.

<強壯>[加護病房]</強力>

KindTitle

<強壯>[加護病房]</強力>

KindWord
已淘汰.

<強壯>[加護病房]</強力>

WordIdeo
已淘汰.

包含表意文字字的詞彙標籤值,下限

WordIdeoLimit
已淘汰.

包含表意字的詞彙標籤值上限

WordKana
已淘汰.

包含假名字元的詞彙標籤值,下限

WordKanaLimit
已淘汰.

包含假名字的單字標籤值上限

WordLetter
已淘汰.

包含字母的詞彙標籤值,不包括平假名、片假名或表意字,下限。

WordLetterLimit
已淘汰.

含字母單字的標籤值上限

WordNone
已淘汰.

標籤值用於不屬於其他類別的「詞彙」。

WordNoneLimit
已淘汰.

未分類詞標籤的上限。

WordNumber
已淘汰.

標籤值用於看似數字的詞彙,下限。

WordNumberLimit
已淘汰.

標籤值對於看似數字的詞彙,上限。

屬性

名稱 Description
CharacterInstance

回傳一個新的 BreakIterator 實例,定位邏輯字元邊界。

Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
JniPeerMembers

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

LineInstance

回傳一個新的 BreakIterator 實例,該實例能定位合法的行-包裹位置。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
RuleStatus

對於 RuleBasedBreakIterators,回傳決定當前迭代位置邊界的 break 規則中的狀態標籤。

SentenceInstance

回傳一個新的 BreakIterator 實例,定位句子邊界。

Text

回傳一個 CharacterIterator,針對正在分析的文本。

ThresholdClass

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

ThresholdType

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

TitleInstance

<strong>[icu]</strong> 返回一個新的 BreakIterator 實例,用於定位標題邊界。

WordInstance

回傳一個新的 BreakIterator 實例,該實例能定位單字邊界。

方法

名稱 Description
Clone()

複製方法。

Construct(JniObjectReference, JniObjectReferenceOptions)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
Current()

回傳迭代器目前的位置。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
Equals(Object)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
First()

將迭代器設為第一個邊界位置。

Following(Int32)

將迭代器的當前迭代位置設定為指定位置後的第一個邊界位置。

GetAvailableLocales()

回傳可使用 BreakIterator 的地點列表。

GetCharacterInstance(Locale)

回傳一個新的 BreakIterator 實例,定位邏輯字元邊界。

GetCharacterInstance(ULocale)

<strong>[icu]</strong> 回傳一個新的 BreakIterator 實例,該實例能定位邏輯字元邊界。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetLineInstance(Locale)

回傳一個新的 BreakIterator 實例,該實例能定位合法的行-包裹位置。

GetLineInstance(ULocale)

<strong>[icu]</strong> 回傳一個新的 BreakIterator 實例,該實例能定位合法的線條繞行位置。

GetRuleStatusVec(Int32[])

對於 RuleBasedBreakIterators,從決定當前迭代位置邊界的 break 規則中取得狀態(標籤)值。

GetSentenceInstance(Locale)

回傳一個新的 BreakIterator 實例,定位句子邊界。

GetSentenceInstance(ULocale)

<strong>[icu]</strong> 回傳一個新的 BreakIterator 實例,用來定位句子邊界。

GetTitleInstance(Locale)

<strong>[icu]</strong> 返回一個新的 BreakIterator 實例,用於定位標題邊界。

GetTitleInstance(ULocale)

<strong>[icu]</strong> 返回一個新的 BreakIterator 實例,用於定位標題邊界。

GetWordInstance(Locale)

回傳一個新的 BreakIterator 實例,該實例能定位單字邊界。

GetWordInstance(ULocale)

<strong>[icu]</strong> 回傳一個新的 BreakIterator 實例,該實例能定位單字邊界。

IsBoundary(Int32)

若指定位置為邊界位置,則回傳真。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Last()

將迭代器設為最後一個邊界位置。

Next()

將迭代器推進一個邊界。

Next(Int32)

將迭代器在文字中指定步數移動。

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
Preceding(Int32)

將迭代器目前的迭代位置設為指定位置前的最後邊界位置。

Previous()

將迭代器往後移動一個邊界。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
SetText(ICharSequence)

設定迭代器分析新的文字。

SetText(String)

設定迭代器分析新的文字。

ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

(繼承來源 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

<強力>加護病房增強</強力> 加護病房取代 java.text.BreakIterator了。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於