词边界

原文: https://docs.oracle.com/javase/tutorial/i18n/text/word.html

您调用getWordIterator方法来实例化检测字边界的BreakIterator

  1. BreakIterator wordIterator =
  2. BreakIterator.getWordInstance(currentLocale);

当您的应用程序需要对单个单词执行操作时,您将需要创建这样的BreakIterator。这些操作可能是常见的文字处理功能,例如选择,剪切,粘贴和复制。或者,您的应用程序可能会搜索单词,并且必须能够将整个单词与简单的字符串区分开来。

BreakIterator分析单词边界时,它会区分不属于单词的单词和字符。这些字符包括空格,制表符,标点符号和大多数符号,两侧都有单词边界。

以下示例来自程序 BreakIteratorDemo ,标记某些文本中的单词边界。程序创建BreakIterator,然后调用markBoundaries方法:

  1. Locale currentLocale = new Locale ("en","US");
  2. BreakIterator wordIterator =
  3. BreakIterator.getWordInstance(currentLocale);
  4. String someText = "She stopped. " +
  5. "She said, \"Hello there,\" and then went " +
  6. "on.";
  7. markBoundaries(someText, wordIterator);

markBoundaries方法在BreakIteratorDemo.java中定义。此方法通过在目标字符串下打印插入符号(^)来标记边界。在下面的代码中,注意while循环,其中markBoundaries通过调用next方法扫描字符串:

  1. static void markBoundaries(String target, BreakIterator iterator) {
  2. StringBuffer markers = new StringBuffer();
  3. markers.setLength(target.length() + 1);
  4. for (int k = 0; k < markers.length(); k++) {
  5. markers.setCharAt(k,' ');
  6. }
  7. iterator.setText(target);
  8. int boundary = iterator.first();
  9. while (boundary != BreakIterator.DONE) {
  10. markers.setCharAt(boundary,'^');
  11. boundary = iterator.next();
  12. }
  13. System.out.println(target);
  14. System.out.println(markers);
  15. }

markBoundaries方法的输出如下。注意插入符号(^)与标点符号和空格相关的位置:

  1. She stopped. She said, "Hello there," and then
  2. ^ ^^ ^^ ^ ^^ ^^^^ ^^ ^^^^ ^^ ^
  3. went on.
  4. ^ ^^ ^^

BreakIterator类可以轻松地从文本中选择单词。您不必编写自己的例程来处理各种语言的标点符号规则; BreakIterator课为你做这个。

以下示例中的extractWords方法提取并打印给定字符串的单词。请注意,此方法使用Character.isLetterOrDigit来避免打印包含空格字符的“单词”。

  1. static void extractWords(String target, BreakIterator wordIterator) {
  2. wordIterator.setText(target);
  3. int start = wordIterator.first();
  4. int end = wordIterator.next();
  5. while (end != BreakIterator.DONE) {
  6. String word = target.substring(start,end);
  7. if (Character.isLetterOrDigit(word.charAt(0))) {
  8. System.out.println(word);
  9. }
  10. start = end;
  11. end = wordIterator.next();
  12. }
  13. }

BreakIteratorDemo程序调用extractWords,并将前一个示例中使用的相同目标字符串传递给它。 extractWords方法打印出以下单词列表:

  1. She
  2. stopped
  3. She
  4. said
  5. Hello
  6. there
  7. and
  8. then
  9. went
  10. on