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() |
デフォルト・ロケールの文字分割用の新しい
BreakIteratorインスタンスを返します。 |
static BreakIterator |
getCharacterInstance(Locale locale) |
指定されたロケールの文字分割用の新しい
BreakIteratorインスタンスを返します。 |
static BreakIterator |
getLineInstance() |
デフォルト・ロケールの行分割用の新しい
BreakIteratorインスタンスを返します。 |
static BreakIterator |
getLineInstance(Locale locale) |
指定されたロケールの行分割用の新しい
BreakIteratorインスタンスを返します。 |
static BreakIterator |
getSentenceInstance() |
デフォルト・ロケールの文分割用の新しい
BreakIteratorインスタンスを返します。 |
static BreakIterator |
getSentenceInstance(Locale locale) |
指定されたロケールの文分割用の新しい
BreakIteratorインスタンスを返します。 |
abstract CharacterIterator |
getText() |
スキャンされるテキストを取得します。
|
static BreakIterator |
getWordInstance() |
デフォルト・ロケールの単語分割用の新しい
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() |
現在の境界に先行する境界を返します。
|
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()
BreakIteratorインスタンスを返します。public static BreakIterator getWordInstance(Locale locale)
BreakIteratorインスタンスを返します。locale - 目的のロケールNullPointerException - localeがnullの場合public static BreakIterator getLineInstance()
BreakIteratorインスタンスを返します。public static BreakIterator getLineInstance(Locale locale)
BreakIteratorインスタンスを返します。locale - 目的のロケールNullPointerException - localeがnullの場合public static BreakIterator getCharacterInstance()
BreakIteratorインスタンスを返します。public static BreakIterator getCharacterInstance(Locale locale)
BreakIteratorインスタンスを返します。locale - 目的のロケールNullPointerException - localeがnullの場合public static BreakIterator getSentenceInstance()
BreakIteratorインスタンスを返します。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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。