1

何かを行うためにあなたのアドバイスが必要です...スキャナーを使用してプログラムで既に行っているように、ユーザーの入力行を取得したい...しかし、各コマンド(単語)をトークンに分割したい....そうしますそれを行う方法がわからない、今まで私は部分文字列で遊んでいましたが、たとえばユーザーがスペースバーボタンを2回押すと、すべてが間違っています!!!!!

例:
コマンドを挿入してください: 私は 20 歳です

substring または .split(" ") を使用すると、実行されますが、次のことを考えてください。

コマンドを挿入してください : 私は 20 歳です

それがあなたのアドバイスが必要な理由です....問題は、ユーザーの入力をトークンでどのように分割できるかです。

4

3 に答える 3

6

さて、文字列行をトークンに分割する前に正規化する必要があります。最も簡単な方法は、繰り返される空白文字を削除することです。

line = line.replaceAll("\\s+", " ");

(これにより、すべてのタブが単一の に置き換えられます" ")。

于 2012-12-14T10:57:43.213 に答える
3

StringTokenizerクラスを使用します。API から:

「[It] アプリケーションが文字列をトークンに分割できるようにします... StringTokenizer オブジェクトは、トークン化される文字列内の現在の位置を内部的に維持します。」

API からの次のサンプル コードは、アイデアを提供します。

    StringTokenizer st = new StringTokenizer("this is a test");
    while (st.hasMoreTokens()) {
        System.out.println(st.nextToken());
    }

次の結果が生成されます。

    this
    is
    a
    test
于 2012-12-14T11:55:07.993 に答える
0

さて、私が作成したコードは、コマンドを挿入するように要求します。次に、コマンドを取得し、それを任意の数のスペースで分割します (正規表現による)。次に、これらの単語、数字、スピーチ マークなどをトークンとして保存します。その後、for ループで各単語を操作できます。

import java.util.Scanner;

public class CommandReaderProgram{ 

  public static void main(String[] args){
    Scanner userInput = new Scanner(System.in);        
    System.out.println("Please insert a command:");
    String temp = userInput.nextLine();

        while(temp != null){
            String [] tokens = temp.split("\\s+");
            for(String word : tokens){
                System.out.print(word);
                System.out.print(" ");    
            } 
            break;    
        }   
        System.out.print("\n");
 }
}

各単語、数字、スピーチ マークが実際にトークンとして保存されていることをテストするには、System.out.print(" "); の文字を変更します。何にでもコード。例 System.out.print(""); または System.out.print("abcdefg"); そして、このデータを各トークンの間に配置して、トークンが実際に分離されていることを証明します。

残念ながら、現時点では for ループの外でトークン配列を呼び出すことはできませんが、わかり次第お知らせします。

私たちはどちらも非常に似たようなものを作ろうとしていると思うので、あなたが作ろうとしているプログラムのタイプを聞きたいです.

これがあなたが探しているものであることを願っています。

よろしく。

于 2012-12-14T14:08:08.590 に答える