Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
你调用 getWordIterator
方法来实例化检测单词边界的 BreakIterator
:
BreakIterator wordIterator = BreakIterator.getWordInstance(currentLocale);
当你的应用程序需要对单个单词执行操作时,你将需要创建这样的 BreakIterator
。这些操作可能是常见的单词处理功能,例如选择,剪切,粘贴和复制。或者,你的应用程序可能会搜索单词,并且必须能够将整个单词与简单字符串区分开来。
当 BreakIterator
分析单词边界时,它会区分单词和不属于单词的字符。这些字符包括空格,制表符,标点符号和大多数符号,两侧都有单词边界。
下面的示例(来自程序 BreakIteratorDemo
)标记某些文本中的单词边界。该程序创建 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