此页面的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
,并将相同的目标字符串传递给它,该方法打印出以下单词列表:
她 停下来 她 说 你好 那里 然后 继续