JavaTM 2
Platform
Std. Ed. v1.4.0

java.text
クラス BreakIterator

java.lang.Object
  |
  +--java.text.BreakIterator
すべての実装インタフェース:
Cloneable

public abstract class BreakIterator
extends Object
implements Cloneable

BreakIterator クラスは、テキスト内の境界の位置を見つけるメソッドを実装します。BreakIterator のインスタンスは現在の位置を維持し、テキストをスキャンして境界が発生する文字のインデックスを返します。内部的には、BreakIteratorCharacterIterator を使ってテキストをスキャンするため、このプロトコルを実装する任意のオブジェクトによって保持されるテキストをスキャンできます。StringCharacterIterator は、setText に渡された String オブジェクトのスキャンに使用されます。

このクラスによって提供されるファクトリメソッドを使って、さまざまなタイプの分割反復子のインスタンスを生成します。特に、単語、行、文、および文字の境界解析を実行する BreakIterator を生成するには、それぞれ getWordIteratorgetLineIteratorgetSentenceIterator、および 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
 

フィールドの詳細

DONE

public static final int DONE
すべての有効な境界が返されてから、previous() と next() により DONE が返されます。

関連項目:
定数フィールド値
コンストラクタの詳細

BreakIterator

protected BreakIterator()
コンストラクタです。BreakIterator には状態がなく、デフォルトの動作がありません。

メソッドの詳細

clone

public Object clone()
反復子のコピーを作成します。

オーバーライド:
クラス Object 内の clone
戻り値:
この反復子のコピー
関連項目:
Cloneable

first

public abstract int first()
最初の境界を返します。反復子の現在位置は最初の境界に設定されます。

戻り値:
最初のテキスト境界の文字インデックス

last

public abstract int last()
最後の境界を返します。反復子の現在位置は最後の境界に設定されます。

戻り値:
最後のテキスト境界の文字インデックス

next

public abstract int next(int n)
現在の境界から n 番目の境界を返します。

パラメータ:
n - 返される境界。値が 0 の場合、何もしない。負の値は前方の境界へ移動し、正の値は後方の境界へ移動する
戻り値:
現在位置から n 番目の境界のインデックス

next

public abstract int next()
現在の境界に続く境界を返します。

戻り値:
すべての境界が返されている場合は、次のテキスト境界の文字インデックスまたは DONE。next(1) に等しい

previous

public abstract int previous()
現在の境界に先行する境界を返します。

戻り値:
前のテキスト境界の文字インデックス、またはすべての境界が返されている場合は DONE

following

public abstract int following(int offset)
指定されたオフセットに続く最初の境界を返します。返される値は常にオフセットより大きいか、または値 BreakIterator.DONE です。

パラメータ:
offset - スキャン開始へのオフセット。この値は、setText() に渡される CharacterIterator によって判定されなければならない。無効な値を指定すると、IllegalArgumentException がスローされる
戻り値:
指定されたオフセットのあとの最初の境界

preceding

public int preceding(int offset)
指定されたオフセットより前方にある最後の境界を返します。返される値は常に、オフセットより小さいか値 BreakIterator.DONE です。

パラメータ:
offset - スキャン開始へのオフセット。この値は、setText() に渡された CharacterIterator によって判定されなければならない。無効な値を指定すると、IllegalArgumentException がスローされる
戻り値:
指定されたオフセットの前の最後の境界

isBoundary

public boolean isBoundary(int offset)
指定された位置が境界位置の場合に true を返します。

パラメータ:
offset - チェック対象のオフセット
戻り値:
オフセットが境界位置の場合は true

current

public abstract int current()
next()、previous()、first()、または last() によって最後に返されたテキスト境界の文字インデックスを返します。

戻り値:
最後に返された境界

getText

public abstract CharacterIterator getText()
スキャンされるテキストを取得します。

戻り値:
スキャンされるテキスト

setText

public void setText(String newText)
スキャンされる新しいテキスト文字列を設定します。現在のスキャン位置は first() にリセットされます。

パラメータ:
newText - スキャン対象の新しいテキスト

setText

public abstract void setText(CharacterIterator newText)
スキャンされる新しいテキストを設定します。現在のスキャン位置は first() にリセットされます。

パラメータ:
newText - スキャン対象の新しいテキスト

getWordInstance

public static BreakIterator getWordInstance()
デフォルトのロケールを使用して、単語分割のための BreakIterator を生成します。単語分割を実装する BreakIterator のインスタンスを返します。WordBreak は、ダブルクリックなどの単語選択に有用です。

戻り値:
単語分割のための BreakIterator
関連項目:
Locale.getDefault()

getWordInstance

public static BreakIterator getWordInstance(Locale where)
指定したロケールを使用して、単語分割のための BreakIterator を生成します。単語分割を実装する BreakIterator のインスタンスを返します。WordBreak は、ダブルクリックなどの単語選択に有用です。

パラメータ:
where - ロケール。指定したロケールに対して特定の WordBreak が使用不可の場合は、デフォルトの WordBreak が返される
戻り値:
単語分割のための BreakIterator

getLineInstance

public static BreakIterator getLineInstance()
デフォルトのロケールを使用して、行分割のための BreakIterator を生成します。行分割を実装する BreakIterator のインスタンスを返します。LineBreak は論理的に可能な行分割であり、実際の行分割は通常、表示幅によって決まります。LineBreak は、単語折り返しテキストに有用です。

戻り値:
行分割のための BreakIterator
関連項目:
Locale.getDefault()

getLineInstance

public static BreakIterator getLineInstance(Locale where)
指定したロケールを使用して、行分割のための BreakIterator を生成します。行分割を実装する BreakIterator のインスタンスを返します。LineBreak は論理的に可能な行分割であり、実際の行分割は通常、表示幅によって決まります。LineBreak は、単語折り返しテキストに有用です。

パラメータ:
where - ロケール。指定したロケールに対して特定の LineBreak が使用不可の場合は、デフォルトの LineBreak が返される
戻り値:
行分割のための BreakIterator

getCharacterInstance

public static BreakIterator getCharacterInstance()
デフォルトのロケールを使用して、文字分割のための BreakIterator を生成します。文字分割を実装する BreakIterator のインスタンスを返します。文字分割は結合文字シーケンスの境界です。

戻り値:
文字分割のための BreakIterator
関連項目:
Locale.getDefault()

getCharacterInstance

public static BreakIterator getCharacterInstance(Locale where)
指定されたロケールを使用して、文字分割のための BreakIterator を生成します。文字分割を実装する BreakIterator のインスタンスを返します。文字分割は結合文字シーケンスの境界です。

パラメータ:
where - ロケール。指定したロケールに対して特定の文字分割が使用不可の場合は、デフォルトの文字分割が返される
戻り値:
文字分割のための BreakIterator

getSentenceInstance

public static BreakIterator getSentenceInstance()
デフォルトのロケールを使用して文分割のための BreakIterator を生成します。文分割を実装する BreakIterator のインスタンスを返します。

戻り値:
文分割のための BreakIterator
関連項目:
Locale.getDefault()

getSentenceInstance

public static BreakIterator getSentenceInstance(Locale where)
指定されたロケールを使用して、文分割のための BreakIterator を生成します。文分割を実装する BreakIterator のインスタンスを返します。

パラメータ:
where - ロケール。指定したロケールに対して特定の SentenceBreak が使用不可の場合は、デフォルトの SentenceBreak が返される
戻り値:
文分割のための BreakIterator

getAvailableLocales

public static Locale[] getAvailableLocales()
BreakIterators が導入されているロケールセットを取得します。

戻り値:
使用可能なロケール

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

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.