Tokenize problem in Java with separator ". "
Asked Answered
P

4

5

I need to split a text using the separator ". ". For example I want this string :

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

To be cut into two parts:

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

Here is my code :

// 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());

}

And the output is unfortunately :

Washington
is
the
U
S
Capital
Barack
is
living
there

Can someone explain what's going on?

Pardon answered 4/6, 2010 at 7:23 Comment(0)
S
31

Don't use StringTokenizer; it's a legacy class. Use java.util.Scanner or simply String.split instead.

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

This prints:

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

Note that split and Scanner are "regex"-based (regular expressions), and since . is a special regex "meta-character", it needs to be escaped with \. In turn, since \ is itself an escape character for Java string literals, you need to write "\\. " as the delimiter.

This may sound complicated, but it really isn't. split and Scanner are much superior to StringTokenizer, and regex isn't that hard to pick up.

Regular expressions tutorials

Related questions

API Links


But what went wrong?

The problem is that StringTokenizer takes each character in the delimiter string as individual delimiters, i.e. NOT the entire String itself.

From the 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.

Sasnett answered 4/6, 2010 at 7:26 Comment(0)
M
1

Your StringTokenizer constructor takes the delimiter ". " which matches dot or space as delimiters.

Medlin answered 4/6, 2010 at 7:32 Comment(0)
D
0

Try eliminating the blank space after the dot in the delimiter. Use this instead.

StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ".");
Diphthongize answered 4/6, 2010 at 7:27 Comment(2)
That will split "U.S" as wellBurck
@josek.. oops.. sorry, i didn't notice it :)Diphthongize
B
0
  • StringTokenizer(String str) : creates StringTokenizer with specified string.
  • StringTokenizer(String str, String delim) : creates StringTokenizer with specified string and delimiter.
  • StringTokenizer(String str, String delim, boolean returnValue) : creates StringTokenizer with specified string, delimiter and returnValue.

    If a return value is true, delimiter characters are considered to be tokens. If it is false, then delimiter characters serve to separate tokens.

Baxy answered 29/1, 2017 at 16:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.