5

我需要使用分隔符拆分文本". "。例如我想要这个字符串:

Washington is the U.S Capital. Barack is living there.

分成两部分:

Washington is the U.S Capital. 
Barack is living there.

这是我的代码:

// Initialize the tokenizer
StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ". ");
 while (tokenizer.hasMoreTokens()) {
      System.out.println(tokenizer.nextToken());

}

不幸的是,输出是:

Washington
is
the
U
S
Capital
Barack
is
living
there

有人可以解释发生了什么吗?

4

4 回答 4

31

不要使用StringTokenizer; 这是一个遗留类。使用java.util.Scanner或简单地String.split代替。

    String text = "Washington is the U.S Capital. Barack is living there.";
    String[] tokens = text.split("\\. ");
    for (String token : tokens) {
        System.out.println("[" + token + "]");
    }

这打印:

[Washington is the U.S Capital]
[Barack is living there.]

请注意,splitandScanner是基于“正则表达式”的(正则表达式),并且由于.是特殊的正则表达式“元字符”,因此需要使用\. 反过来,由于\它本身是 Java 字符串文字的转义字符,因此您需要编写"\\. "为分隔符。

这听起来可能很复杂,但事实并非如此。split并且ScannerStringTokenizer, 和正则表达式要好得多。

正则表达式教程

相关问题

API 链接


但是出了什么问题?

问题在于StringTokenizer将分隔符字符串中的每个字符作为单独的分隔符,即不是整个字符String本身。

从 API:

StringTokenizer(String str, String delim):为指定的字符串构造一个字符串标记器。参数中的字符delim是分隔标记的分隔符。分隔符本身不会被视为标记。

于 2010-06-04T07:26:43.533 回答
1

您的 StringTokenizer 构造函数采用与点或空格匹配的分隔符“.”作为分隔符。

于 2010-06-04T07:32:39.673 回答
0

尝试消除分隔符中的点后的空格。改用这个。

StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ".");
于 2010-06-04T07:27:54.440 回答
0
  • StringTokenizer(String str) :使用指定的字符串创建 StringTokenizer。
  • StringTokenizer(String str, String delim) : 创建带有指定字符串和分隔符的 StringTokenizer。
  • StringTokenizer(String str, String delim, boolean returnValue) :创建具有指定字符串、分隔符和 returnValue 的 StringTokenizer。

    如果返回值为 true,则将分隔符字符视为标记。如果为 false,则分隔符用于分隔标记。

于 2017-01-29T16:31:33.823 回答