使用分隔符“。”在Java中进行Tokenize问题。

时间:2010-06-04 07:23:05

标签: java string tokenize stringtokenizer

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

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 个答案:

答案 0 :(得分:29)

不要使用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.]

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

这可能听起来很复杂,但事实并非如此。 splitScanner远远优于StringTokenizer,正则表达并不难以接受。

正则表达式教程

相关问题

API链接


但是出了什么问题?

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

来自API:

  

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

答案 1 :(得分:1)

你的StringTokenizer构造函数采用分隔符“。”,它将点或空格作为分隔符。

答案 2 :(得分:0)

尝试在分隔符中的点后删除空格。请改用它。

StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ".");

答案 3 :(得分:0)

  • StringTokenizer(String str):使用指定的字符串创建StringTokenizer。
  • StringTokenizer(String str,String delim):使用指定的字符串和分隔符创建StringTokenizer。
  • StringTokenizer(String str,String delim,boolean returnValue):使用指定的字符串,分隔符和returnValue创建StringTokenizer。

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