|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.text.BreakIterator
BreakIterator
クラスは、テキスト内の境界の位置を見つけるメソッドを実装します。BreakIterator
のインスタンスは現在の位置を維持し、テキストをスキャンして境界が発生する文字のインデックスを返します。内部的には、BreakIterator
は CharacterIterator
を使ってテキストをスキャンするため、このプロトコルを実装する任意のオブジェクトによって保持されるテキストをスキャンできます。StringCharacterIterator
は、setText
に渡された String
オブジェクトのスキャンに使用されます。
このクラスによって提供されるファクトリメソッドを使って、さまざまなタイプの分割反復子のインスタンスを生成します。特に、単語、行、文、および文字の境界解析を実行する BreakIterator
を生成するには、それぞれ getWordIterator
、getLineIterator
、getSentenceIterator
、および getCharacterIterator
を使用します。単一の 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)); }
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.charAt(p)) return last; } last = current; current = wb.next(); } return BreakIterator.DONE; }(BreakIterator.getWordInstance() によって返される反復子は一意であるため、返される分割位置は反復の開始と終了の両方を表すものではありません。つまり、文を分割する反復子は、それぞれが 1 つの文の終了と次の文の開始を表す分割を返します。単語を分割する反復子では、2 つの境界間の文字が単語、句読点、または 2 つの単語間の空白文字の場合があります。上記のコードでは、単純な発見的方法を使用して、単語の開始の境界を判定しています。ある境界と次の境界の間の文字が、少なくとも 1 つの文字 (アルファベット、CJK 統合漢字、ハングル文字、仮名など) を含む場合は、この境界と次の境界の間のテキストを単語とし、そうでない場合は、単語間のデータと見なします。)
CharacterIterator
フィールドの概要 | |
static int |
DONE
すべての有効な境界が返されてから、previous() と next() により DONE が返されます。 |
コンストラクタの概要 | |
protected |
BreakIterator()
コンストラクタです。 |
メソッドの概要 | |
Object |
clone()
反復子のコピーを作成します。 |
abstract int |
current()
next()、previous()、first()、または last() によって最後に返されたテキスト境界の文字インデックスを返します。 |
abstract int |
first()
最初の境界を返します。 |
abstract int |
following(int offset)
指定されたオフセットに続く最初の境界を返します。 |
static Locale[] |
getAvailableLocales()
BreakIterators が導入されているロケールセットを取得します。 |
static BreakIterator |
getCharacterInstance()
デフォルトのロケールを使用して、文字分割のための BreakIterator を生成します。 |
static BreakIterator |
getCharacterInstance(Locale where)
指定されたロケールを使用して、文字分割のための BreakIterator を生成します。 |
static BreakIterator |
getLineInstance()
デフォルトのロケールを使用して、行分割のための BreakIterator を生成します。 |
static BreakIterator |
getLineInstance(Locale where)
指定したロケールを使用して、行分割のための BreakIterator を生成します。 |
static BreakIterator |
getSentenceInstance()
デフォルトのロケールを使用して文分割のための BreakIterator を生成します。 |
static BreakIterator |
getSentenceInstance(Locale where)
指定されたロケールを使用して、文分割のための BreakIterator を生成します。 |
abstract CharacterIterator |
getText()
スキャンされるテキストを取得します。 |
static BreakIterator |
getWordInstance()
デフォルトのロケールを使用して、単語分割のための BreakIterator を生成します。 |
static BreakIterator |
getWordInstance(Locale where)
指定したロケールを使用して、単語分割のための 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 |
フィールドの詳細 |
public static final int DONE
コンストラクタの詳細 |
protected BreakIterator()
メソッドの詳細 |
public Object clone()
Object
内の clone
Cloneable
public abstract int first()
public abstract int last()
public abstract int next(int n)
n
- 返される境界。値が 0 の場合、何もしない。負の値は前方の境界へ移動し、正の値は後方の境界へ移動する
public abstract int next()
public abstract int previous()
public abstract int following(int offset)
offset
- スキャン開始へのオフセット。この値は、setText() に渡される CharacterIterator によって判定されなければならない。無効な値を指定すると、IllegalArgumentException がスローされる
public int preceding(int offset)
offset
- スキャン開始へのオフセット。この値は、setText() に渡された CharacterIterator によって判定されなければならない。無効な値を指定すると、IllegalArgumentException がスローされる
public boolean isBoundary(int offset)
offset
- チェック対象のオフセット
public abstract int current()
public abstract CharacterIterator getText()
public void setText(String newText)
newText
- スキャン対象の新しいテキストpublic abstract void setText(CharacterIterator newText)
newText
- スキャン対象の新しいテキストpublic static BreakIterator getWordInstance()
Locale.getDefault()
public static BreakIterator getWordInstance(Locale where)
where
- ロケール。指定したロケールに対して特定の WordBreak が使用不可の場合は、デフォルトの WordBreak が返される
public static BreakIterator getLineInstance()
Locale.getDefault()
public static BreakIterator getLineInstance(Locale where)
where
- ロケール。指定したロケールに対して特定の LineBreak が使用不可の場合は、デフォルトの LineBreak が返される
public static BreakIterator getCharacterInstance()
Locale.getDefault()
public static BreakIterator getCharacterInstance(Locale where)
where
- ロケール。指定したロケールに対して特定の文字分割が使用不可の場合は、デフォルトの文字分割が返される
public static BreakIterator getSentenceInstance()
Locale.getDefault()
public static BreakIterator getSentenceInstance(Locale where)
where
- ロケール。指定したロケールに対して特定の SentenceBreak が使用不可の場合は、デフォルトの SentenceBreak が返される
public static Locale[] getAvailableLocales()
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.