【问题标题】:Tokenize problem in Java with separator ". "用分隔符“。”在Java中标记问题
【发布时间】:2011-02-27 16:03:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: java string tokenize stringtokenizer


    【解决方案1】:

    不要使用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 字符串文字的转义字符,因此您需要编写"\\. " 作为分隔符。

    这听起来可能很复杂,但事实并非如此。 splitScannerStringTokenizer 优越得多,而且正则表达式也不难掌握。

    正则表达式教程

    相关问题

    API 链接


    但是出了什么问题?

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

    来自 API:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这也会拆分“U.S”
      • @josek.. 哎呀.. 抱歉,我没注意到 :)
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        • StringTokenizer(String str) : 创建指定字符串的StringTokenizer。
        • StringTokenizer(String str, String delim) : 创建带有指定字符串和分隔符的 StringTokenizer。
        • StringTokenizer(String str, String delim, boolean returnValue) : 创建带有指定字符串、分隔符和returnValue的StringTokenizer。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-10
          • 2013-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多