Word Boundaries
您调用getWordIterator
方法来实例化检测到单词边界的BreakIterator
:
BreakIterator wordIterator =
BreakIterator.getWordInstance(currentLocale);
当您的应用程序需要对单个单词执行操作时,您将需要创建一个BreakIterator
。这些操作可能是常用的 Literals 处理功能,例如选择,剪切,粘贴和复制。或者,您的应用程序可以搜索单词,并且它必须能够将整个单词与简单的字符串 区分开。
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