|
Foundation 1.1.2 | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjava.text.BreakIterator
public abstract class 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 内の cloneCloneablepublic 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()
|
Foundation 1.1.2 | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。