JavaTM 2 Platform
Std. Ed. v1.3

java.text
クラス BreakIterator

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

public abstract class BreakIterator
extends Object
implements Cloneable

テキストにおける境界の位置を見つけるためのメソッドを実装します。BreakIterator のインスタンスは、現在の位置を維持し、テキスト全体を走査して、境界 (複数) にある文字 (複数) のインデックスを返します。内部的には、BreakIteratorCharacterIterator を使ってテキストを走査するので、そのプロトコルを実装するオブジェクトであれば、どのオブジェクトによって保持されるテキストでも走査することができます。setText に渡される String オブジェクトの走査には、StringCharacterIterator が使用されます。

さまざまなタイプの BreakIterator (ブレーク反復子) のインスタンスを生成するには、このクラスのファクトリメソッドを使用します。具体的には getWordIteratorgetLineIteratorgetSentenceIteratorgetCharacterIterator を使って、それぞれ語、行、文、文字の境界を分析する 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
 

フィールドの詳細

DONE

public static final int DONE
すべての有効な境界が返されたあと、previous() と next() が DONE を返します。
コンストラクタの詳細

BreakIterator

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

clone

public Object clone()
反復子のコピーを作成します。
オーバーライド:
クラス Object 内の clone
戻り値:
反復子のコピー

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 - 確認するオフセット
戻り値:
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 は語の折り返しが必要なテキストのときに使用します。
戻り値:
行ブレークのための BreakIterato
関連項目:
Locale.getDefault()

getLineInstance

public static BreakIterator getLineInstance(Locale where)
指定されたロケールを使って、行ブレークのための BreakIterator を作成します。行ブレークを実装する BreakIterator のインスタンスを返します。行ブレークは、論理的に可能な行ブレークのことです。実際の行ブレークは通常、ディスプレイの幅によって決まります。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()
BreakIterator が導入される対象のロケールセットを取得します。
戻り値:
使用可能なロケール

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.