|
Java プラットフォーム 1.2 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.text.BreakIterator
テキストにおける境界の位置を見つけるためのメソッドを実装します。BreakIterator
のインスタンスは、現在の位置を維持し、テキスト全体を走査して、境界 (複数) にある文字 (複数) のインデックスを返します。内部的には、BreakIterator
は CharacterIterator
を使ってテキストを走査するので、そのプロトコルを実装するオブジェクトであれば、どのオブジェクトによって保持されるテキストでも走査することができます。setText
に渡される String
オブジェクトの走査には、StringCharacterIterator
が使用されます。
さまざまなタイプの BreakIterator (ブレーク反復子) のインスタンスを生成するには、このクラスのファクトリメソッドを使用します。具体的には getWordIterator
、getLineIterator
、getSentenceIterator
、getCharacterIterator
を使って、それぞれ語、行、文、文字の境界を分析する BreakIterator
を生成します。単一の BreakIterator
は、1 つの単位 (語、行、文など) だけに作用します。行いたい各単位境界の分析ごとに、異なる反復子を使用する必要があります。
行境界分析は、行の折り返しの際に、テキスト文字列をどこで分けるかを判断するために使用します。この機構によって、句読点やハイフン付きの語が正しく処理されます。
文境界分析は、数値や省略形のピリオドや、引用符や括弧などの区切り文字を正しく解釈して文を選択します。
語境界分析は、検索と置換の機能や、ダブルクリックで語を選択できるようにするテキスト編集アプリケーションで使用されます。語の選択では、語の中の句読点や語に続く句読点が正しく解釈されます。記号や句読点など、語として認められない文字は、その両側で語のブレークが起こります。
文字境界分析を使うと、たとえば、テキスト文字列でカーソルを移動したいときなどに、文字単位で処理することができます。文字境界の分析では、その文字がどのように格納されていても、文字列が正規の順序で処理されます。たとえば、アクセント付きの文字は基本文字と発音区別符号として格納されることがあります。ユーザが何を 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() が返す反復子は、それが返すブレーク位置が繰り返し処理される対象の先頭と末尾をどちらも表現しない点では独特です。つまり、文ブレーク反復子はそれぞれ、ある文の末尾と次の文の先頭を表すブレークを返します。語ブレーク反復子では、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()
BreakIterator が導入される対象のロケールセットを取得します。 |
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()
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()
|
Java プラットフォーム 1.2 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |