Foundation 1.1.2

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 がスローされる
戻り値:
指定されたオフセットの前の最後の境界
導入されたバージョン:
1.2

isBoundary

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

パラメータ:
offset - チェック対象のオフセット
戻り値:
オフセットが境界位置である場合は true
導入されたバージョン:
1.2

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 はテキストの折り返しに役立ちます。

戻り値:
改行のための BreakIterator
関連項目:
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()
BreakIterators が導入されているロケールセットを取得します。

戻り値:
使用できるロケール

Foundation 1.1.2

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

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。