此页面的Java教程是针对JDK 8编写的。页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及后续版本中更新的语言功能的概述。
请参阅JDK发行说明以获取有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
你可以调用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中定义。该方法通过在目标字符串下方打印插入符号(^)来标记边界。在下面的代码中,注意markBoundaries通过调用next方法扫描字符串的while循环:
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,并将相同的目标字符串传递给它,该方法打印出以下单词列表:
她 停下来 她 说 你好 那里 然后 继续