JavaTM Platform
Standard Ed. 6

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 를 생성하려면 , 각각 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.codePointAt(p)))
                 return last;
         }
         last = current;
         current = wb.next();
     }
     return BreakIterator.DONE;
 }
 
(BreakIterator.getWordInstance()에 의해 반환되는 반복자는 일의이기 (위해)때문에, 반환되는 분할 위치는 반복의 개시와 종료의 양쪽 모두를 나타내는 것은 아니다. 즉, 문장을 분할하는 반복자는, 각각이 1 개의 문장의 종료와 다음의 문장의 개시를 나타내는 분할을 돌려준다. 단어를 분할하는 반복자에서는, 2 개의 경계간의 문자가 단어, 구두점, 또는 2 개의 단어간의 공백 문자의 경우가 있다. 상기의 코드에서는, 단순한 휴리스틱을 사용해, 단어의 개시의 경계를 판정하고 있다. 어느 경계와 다음의 경계의 사이의 문자가, 적어도 1 개의 문자 (알파벳, CJK 통합 한자, 한글 문자, 가명등)를 포함한 경우는, 이 경계와 다음의 경계의 사이의 텍스트를 단어로 해, 그렇지 않은 경우는, 단어간의 데이터라고 본다)

관련 항목:
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)
          지정된 문자 오프셋(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)
          지정된 문자 오프셋(offset)가 텍스트 경계인 경우는 true 를 돌려줍니다.
abstract  int last ()
          마지막 경계를 돌려줍니다.
abstract  int next ()
          현재의 경계에 계속되는 경계를 돌려줍니다.
abstract  int next (int n)
          현재의 경계로부터 n 번째의 경계를 돌려줍니다.
 int preceding (int offset)
          지정된 문자 오프셋(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
DONE 는, 최초 또는 마지막 텍스트 경계에 도달했을 때에, previous(), next(), next(int), preceding(int), 및 following(int)에 의해 돌려주어집니다.

관련 항목:
정수 필드치
생성자 의 상세

BreakIterator

protected BreakIterator()
생성자 입니다. BreakIterator 에는 상태가 없고, 디폴트의 동작이 없습니다.

메소드의 상세

clone

public Object  clone()
반복자의 카피를 작성합니다.

오버라이드(override):
클래스 Object 내의 clone
반환값:
이 반복자의 카피
관련 항목:
Cloneable

first

public abstract int first()
최초의 경계를 돌려줍니다. 반복자의 현재 위치는 최초의 텍스트 경계로 설정됩니다.

반환값:
최초의 텍스트 경계의 문자 인덱스

last

public abstract int last()
마지막 경계를 돌려줍니다. 반복자의 현재 위치는 마지막 텍스트 경계로 설정됩니다.

반환값:
마지막 텍스트 경계의 문자 인덱스

next

public abstract int next(int n)
현재의 경계로부터 n 번째의 경계를 돌려줍니다. 최초 또는 마지막 텍스트 경계에 도달했을 경우,BreakIterator.DONE 가 돌려주어져 현재 위치는 도달한 최초 또는 마지막 텍스트 경계로 설정됩니다. 그 이외의 경우, 반복자의 현재 위치는 새로운 경계로 설정됩니다. 예를 들어, 반복자의 현재 위치가 m 번째의 텍스트 경계에 있어, 현재의 경계로부터 마지막 텍스트 경계까지 3 개의 경계가 존재하고 있는 경우, next(2)를 호출하면(자) m + 2 가 돌려주어져 새로운 텍스트 위치는 (m + 2) 번째의 텍스트 경계로 설정됩니다. next(4)를 호출하면(자) BreakIterator.DONE 가 돌려주어져 마지막 텍스트 경계가 새로운 텍스트 위치가 됩니다.

파라미터:
n - 반환되는 경계. 값이 0 의 경우, 아무것도 하지 않는다. 0 보다 작은 값은 전방의 경계에 이동해, 정의 값은 후방의 경계에 이동한다
반환값:
현재 위치로부터 n 번째의 경계의 문자 인덱스. 혹은, 최초 또는 마지막 텍스트 경계에 도달했을 경우는, BreakIterator.DONE

next

public abstract int next()
현재의 경계에 계속되는 경계를 돌려줍니다. 현재의 경계가 마지막 텍스트 경계의 경우,BreakIterator.DONE 가 돌려주어져 반복자의 현재 위치는 변경되지 않습니다. 그 이외의 경우, 반복자의 현재 위치는, 현재의 경계에 계속되는 경계로 설정됩니다.

반환값:
다음의 텍스트 경계의 문자 인덱스. 혹은, 현재의 경계가 마지막 텍스트 경계의 경우는, BreakIterator.DONE next(1)에 동일한
관련 항목:
next(int)

previous

public abstract int previous()
현재의 경계에 선행하는 경계를 돌려줍니다. 현재의 경계가 최초의 텍스트 경계의 경우,BreakIterator.DONE 가 돌려주어져 반복자의 현재 위치는 변경되지 않습니다. 그 이외의 경우, 반복자의 현재 위치는, 현재의 경계에 선행하는 경계로 설정됩니다.

반환값:
전의 텍스트 경계의 문자 인덱스. 혹은, 현재의 경계가 최초의 텍스트 경계의 경우는, BreakIterator.DONE

following

public abstract int following(int offset)
지정된 문자 오프셋(offset)에 계속되는 최초의 경계를 돌려줍니다. 지정된 오프셋(offset)가 마지막 텍스트 경계에 상당하는 경우,BreakIterator.DONE 가 돌려주어져 반복자의 현재 위치는 변경되지 않습니다. 그 이외의 경우, 반복자의 현재 위치는 반환된 경계로 설정됩니다. 반환되는 값은 항상 오프셋(offset)보다 큰지, 또는 값 BreakIterator.DONE 입니다.

파라미터:
offset - 스캔 개시 위치를 나타내는 문자 오프셋(offset).
반환값:
지정된 오프셋(offset)의 뒤의 최초의 경계. 혹은, 오프셋(offset)로서 마지막 텍스트 경계가 지정되었을 경우는, BreakIterator.DONE
예외:
IllegalArgumentException - 지정된 오프셋(offset)가 최초의 텍스트 경계보다 작은지, 마지막 텍스트 경계보다 큰 경우

preceding

public int preceding(int offset)
지정된 문자 오프셋(offset)보다 전방에 있는 마지막 경계를 돌려줍니다. 지정된 오프셋(offset)가 최초의 텍스트 경계에 상당하는 경우,BreakIterator.DONE 가 돌려주어져 반복자의 현재 위치는 변경되지 않습니다. 그 이외의 경우, 반복자의 현재 위치는 반환된 경계로 설정됩니다. 반환되는 값은 항상 오프셋(offset)보다 작은지, 또는 값 BreakIterator.DONE 입니다.

파라미터:
offset - 스캔 개시 위치를 나타내는 문자 오프셋(offset).
반환값:
지정된 오프셋(offset)의 전의 마지막 경계. 혹은, 오프셋(offset)로서 최초의 텍스트 경계가 지정되었을 경우는, BreakIterator.DONE
예외:
IllegalArgumentException - 지정된 오프셋(offset)가 최초의 텍스트 경계보다 작은지, 마지막 텍스트 경계보다 큰 경우
도입된 버젼:
1.2

isBoundary

public boolean isBoundary(int offset)
지정된 문자 오프셋(offset)가 텍스트 경계인 경우는 true 를 돌려줍니다.

파라미터:
offset - 체크 대상의 문자 오프셋(offset)
반환값:
오프셋(offset)가 경계 위치의 경우는 true, 그렇지 않은 경우는 false
도입된 버젼:
1.2

current

public abstract int current()
next(), next(int), previous(), first(), last(), following(int), 또는 preceding(int)에 의해 마지막에 반환된 텍스트 경계의 문자 인덱스를 돌려줍니다. 최초 또는 마지막 텍스트 경계에 도달했기 때문에 이러한 메소드로부터 BreakIterator.DONE 가 돌려주어졌을 경우는, 도달한 최초 또는 마지막 텍스트 경계를 돌려줍니다.

반환값:
상기의 메소드로부터 반환된 텍스트 경계, 혹은 최초 또는 마지막 텍스트 경계
관련 항목:
next() , next(int) , previous() , first() , last() , following(int) , preceding(int)

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 인스턴스를 돌려줍니다.

반환값:
단어 분할을 위한 분할 반복자

getWordInstance

public static BreakIterator  getWordInstance(Locale  locale)
지정된 로케일의단어 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

파라미터:
locale - 목적의 로케일
반환값:
단어 분할을 위한 분할 반복자
예외:
NullPointerException - locale 가 null 의 경우

getLineInstance

public static BreakIterator  getLineInstance()
디폴트 로케일행 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

반환값:
행 분할을 위한 분할 반복자

getLineInstance

public static BreakIterator  getLineInstance(Locale  locale)
지정된 로케일의행 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

파라미터:
locale - 목적의 로케일
반환값:
행 분할을 위한 분할 반복자
예외:
NullPointerException - locale 가 null 의 경우

getCharacterInstance

public static BreakIterator  getCharacterInstance()
디폴트 로케일문자 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

반환값:
문자 분할을 위한 분할 반복자

getCharacterInstance

public static BreakIterator  getCharacterInstance(Locale  locale)
지정된 로케일의문자 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

파라미터:
locale - 목적의 로케일
반환값:
문자 분할을 위한 분할 반복자
예외:
NullPointerException - locale 가 null 의 경우

getSentenceInstance

public static BreakIterator  getSentenceInstance()
디폴트 로케일문장 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

반환값:
문 분할을 위한 분할 반복자

getSentenceInstance

public static BreakIterator  getSentenceInstance(Locale  locale)
지정된 로케일의문장 분할용의 새로운 BreakIterator 인스턴스를 돌려줍니다.

파라미터:
locale - 목적의 로케일
반환값:
문 분할을 위한 분할 반복자
예외:
NullPointerException - locale 가 null 의 경우

getAvailableLocales

public static Locale [] getAvailableLocales()
이 클래스의 get*Instance 메소드가 지역 대응의 인스턴스를 돌려줄 수 있는 로케일 모든 배열을 돌려줍니다. 반환되는 배열은, Java 런타임 및 인스톨 되고 있는 BreakIteratorProvider 구현에 의해 지원되고 있는 로케일의 화집합을 나타냅니다. 이것에는,Locale.US 와 등가인 Locale 인스턴스가 적어도 1 개(살) 포함되어 있을 필요가 있습니다.

반환값:
로컬라이즈 된 BreakIterator 인스턴스를 사용 가능한 로케일의 배열

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.