BreakIterator
은 문자, 단어, 줄 및 문장 사이에 가능한 구분을 찾기 위해 사용할 수 있습니다. 이는 보이는 문자를 통해 커서를 이동하고, 단어를 두 번 클릭하여 선택하고, 문장을 선택하기 위해 세 번 클릭하고, 줄 바꿈하는 것과 같은 작업에 유용합니다.
상용구 코드
다음 코드는 아래 예에서 사용된다. 첫 번째 부분을 조정하여 텍스트를 변경하고 BreakIterator
유형을 변경하십시오.
// change these two lines for the following examples
String text = "This is some text.";
BreakIterator boundary = BreakIterator.getCharacterInstance();
// boiler plate code
boundary.setText(text);
int start = boundary.first();
for (int end = boundary.next(); end != BreakIterator.DONE; end = boundary.next()) {
System.out.println(start + " " + text.substring(start, end));
start = end;
}
그냥이를 테스트하려면
, 당신은 활동의
onCreate
안드로이드에 직접 붙여 넣을 수 있습니다. 나는
Log
보다는
System.out.println
을 사용하고 있기 때문에 Java 전용 환경에서도 테스트 할 수 있습니다.
저는 API24에서만 사용할 수있는 ICU 대신 java.text.BreakIterator
을 사용하고 있습니다. 자세한 내용은 하단의 링크를 참조하십시오.
문자
변경 상용구 코드는
String text = "English中文123éé\uD83D\uDE00\uD83C\uDDEE\uD83C\uDDF3.";
BreakIterator breakIterator = BreakIterator.getCharacterInstance();
다음과 같은 출력
0 H
1 i
2
3 中
4 文
5 é
6 é
8
10
14 .
가장 관심 부품, 인덱스 6
, 8
에 있으며 10
을 포함합니다. 브라우저는 문자를 올바르게 표시 할 수도 있고 표시하지 않을 수도 있지만 사용자는 여러 UTF-16 값으로 구성되어 있어도 이들 모두를 단일 문자로 해석합니다.
단어
변경 상용구 코드는 다음을 포함합니다 :
String text = "I like to eat apples. 我喜欢吃苹果。";
BreakIterator boundary = BreakIterator.getWordInstance();
출력
0 I
1
2 like
6
7 to
9
10 eat
13
14 apples
20 .
21
22 我
23 喜欢
25 吃
26 苹果
28 。
여기에서 주목해야 할 몇 가지 흥미있는 일이 있습니다.첫째, 단어 분리는 공백의 양쪽에서 감지됩니다. 둘째, 다른 언어가 있더라도 여러 문자로 된 중국어 단어가 계속 인식됩니다. 로케일을 으로 설정 한 경우에도 내 테스트에서는 여전히 사실입니다.
라인
당신은 단어의 예와 같은 코드를 유지할 수 있습니다 :
0 I
2 like
7 to
10 eat
14 apples.
22 我
23 喜
24 欢
25 吃
26 苹
27 果。
주
String text = "I like to eat apples. 我喜欢吃苹果。";
BreakIterator boundary = BreakIterator.getLineInstance();
출력 브레이크 위치가 텍스트의 전체 라인이 아니라는 것을. 그것들은 줄 바꿈 텍스트를 줄 수있는 편리한 장소입니다.
출력은 단어 예와 비슷합니다. 그러나 이제 공백과 구두점이 단어 앞에 포함됩니다. 새 줄을 공백이나 구두점으로 시작하지 않으려면이 말이 맞습니다. 또한 한자는 모든 문자에 줄 바꿈을 적용합니다. 이는 중국어로 여러 줄의 단어를 구분하는 것이 옳다는 사실과 일치합니다.
문장
변경 상용구 코드는 다음을 포함합니다 :

올바른 문장 분할은 여러 언어로 인식되었다
String text = "I like to eat apples. My email is [email protected]\n" +
"This is a new paragraph. 我喜欢吃苹果。我不爱吃臭豆腐。";
BreakIterator boundary = BreakIterator.getSentenceInstance();
출력. 또한 전자 메일 도메인의 점에 대해 오 탐지 (false positive)가 발생하지 않았습니다.
노트
당신이 BreakIterator
를 만들 때 당신은 Locale으로 설정할 수 있지만 그렇지 않은 경우 그냥 default locale을 사용합니다.
추가 읽기
ICU version of BreakIterator This
중국어 텍스트를 단어로 분해하는 것이 올바르게 작동하지 않습니다. https://stackoverflow.com/questions/44507838/breakiterator-not-working-correctly-with-chinese-text에서 살펴볼 수 있습니까? – srgsanky