5

区切り文字を使用してテキストを分割する必要があります". "。たとえば、私はこの文字列が必要です:

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

2つの部分にカットするには:

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.]

splitScannerは「正規表現」ベース(正規表現)であり、.は特殊な正規表現「メタ文字」であるため、。でエスケープする必要があることに注意してください\。同様に、はそれ自体がJava文字列リテラルのエスケープ文字であるため、区切り文字として\記述する必要があります。"\\. "

これは複雑に聞こえるかもしれませんが、実際にはそうではありません。splitScannerよりもはるかに優れてStringTokenizerおり、正規表現を取得するのはそれほど難しくありません。

正規表現のチュートリアル

関連する質問

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 に答える