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

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 

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

请您参考如下方法:

不要使用 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 ,并且正则表达式并不难掌握。

正则表达式教程
  • Java Lessons/Regular expressions
  • regular-expressions.info - 非常好的教程,不是 Java 特定的

  • 相关问题
  • Scanner vs. StringTokenizer vs. String.Split

  • API 链接
  • java.util.StringTokenizer
  • StringTokenizer是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人使用 split String的方法或 java.util.regex包代替。
  • java.util.Scanner
  • 一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。
  • Java Tutorials - Basic I/O - Scanning and formatting
  • String[] String.split
  • 围绕给定正则表达式的匹配拆分此字符串。


  • 但是出了什么问题?

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

    从 API:

    StringTokenizer(String str, String delim): Constructs a string tokenizer for the specified string. The characters in the delim argument are the delimiters for separating tokens. Delimiter characters themselves will not be treated as tokens.


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!