# 词边界

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/text/word.html](https://docs.oracle.com/javase/tutorial/i18n/text/word.html)

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

```
BreakIterator wordIterator =
    BreakIterator.getWordInstance(currentLocale);

```

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

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

以下示例来自程序 [`BreakIteratorDemo`](examples/BreakIteratorDemo.java) ，标记某些文本中的单词边界。程序创建`BreakIterator`，然后调用`markBoundaries`方法：

```
Locale currentLocale = new Locale ("en","US");

BreakIterator wordIterator =
    BreakIterator.getWordInstance(currentLocale);

String someText = "She stopped. " +
    "She said, \"Hello there,\" and then went " +
    "on.";

markBoundaries(someText, wordIterator);

```

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

```
static void markBoundaries(String target, BreakIterator iterator) {

    StringBuffer markers = new StringBuffer();
    markers.setLength(target.length() + 1);
    for (int k = 0; k < markers.length(); k++) {
        markers.setCharAt(k,' ');
    }

    iterator.setText(target);
    int boundary = iterator.first();

    while (boundary != BreakIterator.DONE) {
        markers.setCharAt(boundary,'^');
        boundary = iterator.next();
    }

    System.out.println(target);
    System.out.println(markers);
}

```

`markBoundaries`方法的输出如下。注意插入符号（^）与标点符号和空格相关的位置：

```
She stopped.  She said, "Hello there," and then
^  ^^      ^^ ^  ^^   ^^^^    ^^    ^^^^  ^^   ^

went on.
^   ^^ ^^

```

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

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

```
static void extractWords(String target, BreakIterator wordIterator) {

    wordIterator.setText(target);
    int start = wordIterator.first();
    int end = wordIterator.next();

    while (end != BreakIterator.DONE) {
        String word = target.substring(start,end);
        if (Character.isLetterOrDigit(word.charAt(0))) {
            System.out.println(word);
        }
        start = end;
        end = wordIterator.next();
    }
}

```

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

```
She
stopped
She
said
Hello
there
and
then
went
on

```