- すべての実装されたインタフェース:
Cloneable
BreakIterator
クラスは、テキスト内の境界の位置を見つけるメソッドを実装します。 BreakIterator
のインスタンスは現在の位置を維持し、テキストをスキャンして境界が発生する文字のインデックスを返します。 内部的には、BreakIterator
はCharacterIterator
を使ってテキストをスキャンするため、このプロトコルを実装する任意のオブジェクトによって保持されるテキストをスキャンできます。 StringCharacterIterator
は、setText
に渡されたString
オブジェクトのスキャンに使用されます。
このクラスによって提供されるファクトリ・メソッドを使って、さまざまな型の分割イテレータのインスタンスを生成します。 特に、単語、行、文、および文字の境界解析を実行するBreakIterator
を生成するには、それぞれgetWordInstance
、getLineInstance
、getSentenceInstance
、およびgetCharacterInstance
を使用します。 単一のBreakIterator
は、1つのユニット(単語、行、文など)のみを処理します。 実行するユニット境界解析ごとに異なるイテレータを使用する必要があります。
行の境界解析では、テキスト文字列を行折返しで分割する位置を判定します。 句読点およびハイフネーションされた単語も、メカニズムにより正しく処理されます。 実際の行分割は、使用可能な行幅も考慮する必要があるため、より高いレベルのソフトウェアによって処理されます。
文の境界解析では、数字と略語の中のピリオド、さらに引用符や括弧などの終了文字の正しい解釈について選択が可能です。
単語の境界解析は、検索置換機能で使用されます。また、テキスト編集アプリケーション内で、ダブルクリックによって単語が選択可能になります。 単語選択では、後続を含む単語内で句読点の正しい解釈が提供されます。 また、記号や句読点などのように単語の一部でない文字、前後に分割のある文字も正しく解釈されます。
文字の境界解析では、たとえばカーソルをテキスト文字列に沿って動かすような場合に、ユーザーが予測するとおりの操作が行われるようにします。 文字の境界解析により、文字の格納方法に依存せず、文字列の正しいナビゲーションが可能になります。 返される境界は、補助文字、結合文字シーケンス、または合字クラスタの境界になる場合があります。 たとえば、アクセント付きの文字は、基準文字と発音区別符号として格納されている場合があります。 ユーザーの文字に対する認識は言語間で異なります。
- 実装要件:
- 文字境界解析のデフォルトの実装は、Unicode ConsortiumのExtended Grapheme Clusterのブレークに準拠しています。 詳細については、Unicode Standard Annex #29の「Graphemeクラスタの境界」セクションを参照してください。
このクラスのファクトリ・メソッドから返される
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)); }
(BreakIterator.getWordInstance()によって返されるイテレータは一意であるため、返される分割位置は反復の開始と終了の両方を表すものではない。 つまり、文を分割するイテレータは、それぞれが1つの文の終了と次の文の開始を表す分割を返す。 単語を分割するイテレータでは、2つの境界間の文字が単語、句読点、または2つの単語間の空白文字の場合がある。 上記のコードでは、単純なヒューリスティックを使用して、単語の開始の境界を判定している。ある境界と次の境界の間の文字が、少なくとも1つの文字(アルファベット、CJK統合漢字、ハングル文字、仮名など)を含む場合は、この境界と次の境界の間のテキストを単語とし、そうでない場合は、単語間のデータと見なす)。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; }
- 導入されたバージョン:
- 1.1
- 関連項目:
-
フィールドのサマリー
修飾子と型フィールド説明static final int
DONEは、最初または最後のテキスト境界に到達したときに、previous()、next()、next(int)、preceding(int)、およびfollowing(int)によって返されます。 -
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明clone()
イテレータのコピーを作成します。abstract int
current()
next()、next(int)、previous()、first()、last()、following(int)、またはpreceding(int)によって最後に返されたテキスト境界の文字インデックスを返します。abstract int
first()
最初の境界を返します。abstract int
following
(int offset) 指定された文字オフセットに続く最初の境界を返します。static Locale[]
このクラスのget*Instance
メソッドがローカライズされたインスタンスを返すことのできるロケールすべての配列を返します。static BreakIterator
デフォルト・ロケールの文字分割用の新しいBreakIterator
インスタンスを返します。static BreakIterator
getCharacterInstance
(Locale locale) 指定されたロケールの文字分割用の新しいBreakIterator
インスタンスを返します。static BreakIterator
デフォルト・ロケールの行分割用の新しいBreakIterator
インスタンスを返します。static BreakIterator
getLineInstance
(Locale locale) 指定されたロケールの行分割用の新しいBreakIterator
インスタンスを返します。static BreakIterator
デフォルト・ロケールの文分割用の新しいBreakIterator
インスタンスを返します。static BreakIterator
getSentenceInstance
(Locale locale) 指定されたロケールの文分割用の新しいBreakIterator
インスタンスを返します。abstract CharacterIterator
getText()
スキャンされるテキストを取得します。static BreakIterator
デフォルト・ロケールの単語分割用の新しい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()
現在の境界に先行する境界を返します。void
スキャンされる新しいテキスト文字列を設定します。abstract void
setText
(CharacterIterator newText) スキャンされる新しいテキストを設定します。
-
フィールド詳細
-
DONE
public static final int DONEDONEは、最初または最後のテキスト境界に到達したときに、previous()、next()、next(int)、preceding(int)、およびfollowing(int)によって返されます。- 関連項目:
-
-
コンストラクタの詳細
-
BreakIterator
protected BreakIterator()コンストラクタです。 BreakIteratorには状態がなく、デフォルトの動作がありません。
-
-
メソッドの詳細
-
clone
public Object clone()イテレータのコピーを作成します。 -
first
public abstract int first()最初の境界を返します。 イテレータの現在位置は最初のテキスト境界に設定されます。- 戻り値:
- 最初のテキスト境界の文字インデックス。
-
last
public abstract int last()最後の境界を返します。 イテレータの現在位置は最後のテキスト境界に設定されます。- 戻り値:
- 最後のテキスト境界の文字インデックス。
-
next
public abstract int next(int n) 現在の境界からn番目の境界を返します。 最初または最後のテキスト境界に到達した場合、BreakIterator.DONE
が返され、現在位置は到達した最初または最後のテキスト境界に設定されます。 それ以外の場合、イテレータの現在位置は新しい境界に設定されます。 たとえば、イテレータの現在位置がm番目のテキスト境界にあり、現在の境界から最後のテキスト境界まで3つの境界が存在している場合、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)に等しい。 - 関連項目:
-
previous
public abstract int previous()現在の境界に先行する境界を返します。 現在の境界が最初のテキスト境界の場合、BreakIterator.DONE
が返され、イテレータの現在位置は変更されません。 それ以外の場合、イテレータの現在位置は、現在の境界に先行する境界に設定されます。- 戻り値:
- 前のテキスト境界の文字インデックス。あるいは、現在の境界が最初のテキスト境界の場合は、
BreakIterator.DONE
。
-
following
public abstract int following(int offset) 指定された文字オフセットに続く最初の境界を返します。 指定されたオフセットが最後のテキスト境界と等しい場合、BreakIterator.DONE
を返し、イテレータの現在位置は変更されません。 それ以外の場合、イテレータの現在位置は返された境界に設定されます。 返される値は常にオフセットより大きいか、または値BreakIterator.DONE
です。- パラメータ:
offset
- スキャン開始位置を示す文字オフセット。- 戻り値:
- 指定されたオフセットのあとの最初の境界。あるいは、オフセットとして最後のテキスト境界が指定された場合は、
BreakIterator.DONE
。 - 例外:
IllegalArgumentException
- 指定されたオフセットが最初のテキスト境界より小さいか、最後のテキスト境界より大きい場合。
-
preceding
public int preceding(int offset) 指定された文字オフセットより前方にある最後の境界を返します。 指定されたオフセットが最初のテキスト境界と等しい場合、BreakIterator.DONE
を返し、イテレータの現在位置は変更されません。 それ以外の場合、イテレータの現在位置は返された境界に設定されます。 返される値は常にオフセットより小さいか、または値BreakIterator.DONE
です。- パラメータ:
offset
- スキャン開始位置を示す文字オフセット。- 戻り値:
- 指定されたオフセットの前の最後の境界。あるいは、オフセットとして最初のテキスト境界が指定された場合は、
BreakIterator.DONE
。 - 例外:
IllegalArgumentException
- 指定されたオフセットが最初のテキスト境界より小さいか、最後のテキスト境界より大きい場合。- 導入されたバージョン:
- 1.2
-
isBoundary
public boolean isBoundary(int offset) 指定された文字オフセットがテキスト境界である場合はtrueを返します。- パラメータ:
offset
- チェック対象の文字オフセット。- 戻り値:
- オフセットが境界位置の場合は
true
、そうでない場合はfalse
。 - 例外:
IllegalArgumentException
- 指定されたオフセットが最初のテキスト境界より小さいか、最後のテキスト境界より大きい場合。- 導入されたバージョン:
- 1.2
-
current
public abstract int current()next()、next(int)、previous()、first()、last()、following(int)、またはpreceding(int)によって最後に返されたテキスト境界の文字インデックスを返します。 最初または最後のテキスト境界に到達したためにこれらのメソッドからBreakIterator.DONE
が返された場合は、到達した最初または最後のテキスト境界を返します。- 戻り値:
- 上記のメソッドから返されたテキスト境界、あるいは最初または最後のテキスト境界。
- 関連項目:
-
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()このクラスのget*Instance
メソッドがローカライズされたインスタンスを返すことのできるロケールすべての配列を返します。 返される配列は、JavaランタイムおよびインストールされているBreakIteratorProvider
実装によってサポートされているロケールの和集合を表します。 少なくとも、返される配列には、Locale.ROOT
に等しいLocale
インスタンスと、Locale.US
に等しいLocale
インスタンスが含まれている必要があります。- 戻り値:
- ローカライズされた
BreakIterator
インスタンスを使用可能なロケールの配列。
-