public abstract class BreakIterator extends Object implements Cloneable
BreakIterator
クラスは、テキスト内の境界の位置を見つけるメソッドを実装します。BreakIterator
のインスタンスは現在の位置を維持し、テキストをスキャンして境界が発生する文字のインデックスを返します。内部的には、BreakIterator
はCharacterIterator
を使ってテキストをスキャンするため、このプロトコルを実装する任意のオブジェクトによって保持されるテキストをスキャンできます。StringCharacterIterator
は、setText
に渡されたString
オブジェクトのスキャンに使用されます。
このクラスによって提供されるファクトリ・メソッドを使って、さまざまな型の分割イテレータのインスタンスを生成します。特に、単語、行、文、および文字の境界解析を実行するBreakIterator
を生成するには、それぞれgetWordInstance
、getLineInstance
、getSentenceInstance
、およびgetCharacterInstance
を使用します。単一のBreakIterator
は、1つのユニット(単語、行、文など)のみを処理します。実行するユニット境界解析ごとに異なるイテレータを使用する必要があります。
行の境界解析では、テキスト文字列を行折返しで分割する位置を判定します。句読点およびハイフネーションされた単語も、メカニズムにより正しく処理されます。実際の行分割は、使用可能な行幅も考慮する必要があるため、より高いレベルのソフトウェアによって処理されます。
文の境界解析では、数字と略語の中のピリオド、さらに引用符や括弧などの終了文字の正しい解釈について選択が可能です。
単語の境界解析は、検索置換機能で使用されます。また、テキスト編集アプリケーション内で、ダブルクリックによって単語が選択可能になります。単語選択では、後続を含む単語内で句読点の正しい解釈が提供されます。また、記号や句読点などのように単語の一部でない文字、前後に分割のある文字も正しく解釈されます。
文字の境界解析では、たとえばカーソルをテキスト文字列に沿って動かすような場合に、ユーザーが予測するとおりの操作が行われるようにします。文字の境界解析により、文字の格納方法に依存せず、文字列の正しいナビゲーションが可能になります。返される境界は、補助文字、結合文字シーケンス、または合字クラスタの境界になる場合があります。たとえば、アクセント付きの文字は、基準文字と発音区別符号として格納されている場合があります。ユーザーの文字に対する認識は言語間で異なります。
このクラスのファクトリ・メソッドから返される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; }
CharacterIterator
修飾子と型 | フィールドと説明 |
---|---|
static int |
DONE
DONEは、最初または最後のテキスト境界に到達したときに、previous()、next()、next(int)、preceding(int)、およびfollowing(int)によって返されます。
|
修飾子 | コンストラクタと説明 |
---|---|
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()
このクラスの
get*Instance メソッドがローカライズされたインスタンスを返すことのできるロケールすべての配列を返します。 |
static BreakIterator |
getCharacterInstance()
|
static BreakIterator |
getCharacterInstance(Locale locale)
指定されたロケールの文字分割用の新しい
BreakIterator インスタンスを返します。 |
static BreakIterator |
getLineInstance()
|
static BreakIterator |
getLineInstance(Locale locale)
指定されたロケールの行分割用の新しい
BreakIterator インスタンスを返します。 |
static BreakIterator |
getSentenceInstance()
|
static BreakIterator |
getSentenceInstance(Locale locale)
指定されたロケールの文分割用の新しい
BreakIterator インスタンスを返します。 |
abstract CharacterIterator |
getText()
スキャンされるテキストを取得します。
|
static BreakIterator |
getWordInstance()
|
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)
スキャンされる新しいテキスト文字列を設定します。
|
public static final int DONE
public Object clone()
public abstract int first()
public abstract int last()
public abstract int next(int n)
BreakIterator.DONE
が返され、現在位置は到達した最初または最後のテキスト境界に設定されます。それ以外の場合、イテレータの現在位置は新しい境界に設定されます。たとえば、イテレータの現在位置がm番目のテキスト境界にあり、現在の境界から最後のテキスト境界まで3つの境界が存在している場合、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
が返され、イテレータの現在位置は変更されません。それ以外の場合、イテレータの現在位置は返された境界に設定されます。返される値は常にオフセットより大きいか、または値BreakIterator.DONE
です。offset
- スキャン開始位置を示す文字オフセット。BreakIterator.DONE
。IllegalArgumentException
- 指定されたオフセットが最初のテキスト境界より小さいか、最後のテキスト境界より大きい場合。public int preceding(int offset)
BreakIterator.DONE
が返され、イテレータの現在位置は変更されません。それ以外の場合、イテレータの現在位置は返された境界に設定されます。返される値は常にオフセットより小さいか、または値BreakIterator.DONE
です。offset
- スキャン開始位置を示す文字オフセット。BreakIterator.DONE
。IllegalArgumentException
- 指定されたオフセットが最初のテキスト境界より小さいか、最後のテキスト境界より大きい場合。public boolean isBoundary(int offset)
offset
- チェック対象の文字オフセット。true
、そうでない場合はfalse
。IllegalArgumentException
- 指定されたオフセットが最初のテキスト境界より小さいか、最後のテキスト境界より大きい場合。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()
public static BreakIterator getWordInstance(Locale locale)
BreakIterator
インスタンスを返します。locale
- 目的のロケールNullPointerException
- locale
がnullの場合public static BreakIterator getLineInstance()
public static BreakIterator getLineInstance(Locale locale)
BreakIterator
インスタンスを返します。locale
- 目的のロケールNullPointerException
- locale
がnullの場合public static BreakIterator getCharacterInstance()
public static BreakIterator getCharacterInstance(Locale locale)
BreakIterator
インスタンスを返します。locale
- 目的のロケールNullPointerException
- locale
がnullの場合public static BreakIterator getSentenceInstance()
public static BreakIterator getSentenceInstance(Locale locale)
BreakIterator
インスタンスを返します。locale
- 目的のロケールNullPointerException
- locale
がnullの場合public static Locale[] getAvailableLocales()
get*Instance
メソッドがローカライズされたインスタンスを返すことのできるロケールすべての配列を返します。返される配列は、JavaランタイムおよびインストールされているBreakIteratorProvider
実装によってサポートされているロケールの和集合を表します。これには、Locale.US
と等価なLocale
インスタンスが少なくとも1つ含まれている必要があります。BreakIterator
インスタンスを使用可能なロケールの配列。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.