0

誰かがこのコードのトークンの目的を教えてもらえますか?最近、Javaでトークンを発見し、それらが使用される理由を理解しようとしています。トークンはブレークポイントとして使用されていると思いましたが、ここでは制限に使用されているように見えます

private String printResult()
{
    StringBuilder result = new StringBuilder();
    String swimType=null;
    String length=null;
    String width=null;
    String depth=null;
    String volume=null;
    String radius=null;
    String pnlName = null;
    try {
        File resultFile = new File("Report.txt");
        Scanner resultScanner = new Scanner(resultFile);

        while(resultScanner.hasNext())
        {
            StringTokenizer strToken = new StringTokenizer(resultScanner.nextLine(), ":");
            if(strToken.hasMoreTokens())
            {
                pnlName = strToken.nextToken();
                swimType = strToken.nextToken();

                if("Box".equalsIgnoreCase(swimType))
                {
                    length = strToken.nextToken();
                    width = strToken.nextToken();
                    depth = strToken.nextToken();
                    volume = strToken.nextToken();
                    result.append(createResultStr(swimType, length, width, depth, volume));
                }
                else
                {
                    radius = strToken.nextToken();
                    depth = strToken.nextToken();
                    volume = strToken.nextToken();                      
                    result.append(createResultStr(swimType, radius, depth, volume));
                }

            }               
        }   
4

2 に答える 2

4

トークン化は、文字に基づいて文字列を分割するプロセスです。コンマで分割することもできます。文字列をトークナイザーに渡し、区切り文字として「,」を指定します。次に、トークナイザーから各アイテムを読み取ると、セパレーターに基づいて分割されます。私が見た一般的なアプローチは、ライブ ストリームを読むことです。トークナイザーはラインフィードでストリームを分割し、次に別のトークナイザーを使用して各行をコンマまたはタブで分割します。

テキストの処理は、多くの場合、フォーマットされた入力文字列の解析で構成されます。構文解析 とは、テキストを一連の個別のパーツ (トークン) に 分割することであり、特定の順序で意味的な意味を伝えることができます。StringTokenizer クラスは、この解析プロセスの最初のステップを提供します。これは、しばしばlexer (字句解析器) またはscannerと呼ばれます。 StringTokenizer はEnumeration インターフェースを 実装します。したがって、入力文字列を指定すると、StringTokenizerを使用して、それに含まれる個々のトークンを列挙できます。

StringTokenizerを使用するには、入力文字列と区切り文字を含む文字列を指定します。 区切り文字は、トークンを区切る文字です。区切り文字列の各文字は有効な区切り文字と見なされます。たとえば、「,;:」 は、区切り文字をコンマ、セミコロン、およびコロンに設定します。区切り文字のデフォルト セットは、空白文字 (スペース、タブ、改行、改行) で構成されます。

StringTokenizer コンストラクターを次に示します。

StringTokenizer(String str) 
StringTokenizer(String str, String delimiters) 
StringTokenizer(String str, String delimiters, boolean delimAsToken)

すべてのバージョンで、str はトークン化される文字列です。最初のバージョンでは、デフォルトの区切り文字が使用されます。2 番目と 3 番目のバージョンでは、delimiters は区切り文字を指定する文字列です。3 番目のバージョンでは、delimAsToken true の場合、文字列が解析されるときに区切り文字もトークンとして返されます。それ以外の場合、区切り文字は返されません。 

最初の 2 つの形式では、区切り文字はトークンとして返されません。StringTokenizer オブジェクトを作成したら、 nextToken( )メソッドを使用して連続するトークンを抽出します。抽出するトークンがまだある場合、hasMoreTokens( )メソッドはtrue を返します。StringTokenizer はEnumerationを実装するため、 hasMoreElements( )および nextElement( )メソッドも実装され、それぞれ hasMoreTokens ( )およびnextToken( ) と同じように動作します。

「key=value」ペアを解析するためのStringTokenizer を作成する例を次に示します。「キー=値」ペアの連続するセットは、セミコロンで区切られます。

// Demonstrate StringTokenizer.
import java.util.StringTokenizer;

class STDemo {
    static String in = "title=Java-Samples;" +
        "author=Emiley J;" +
        "publisher=java-samples.com;" +
        "copyright=2007;";

    public static void main(String args[]) {
        StringTokenizer st = new StringTokenizer(in, "=;");
        while (st.hasMoreTokens()) {
            String key = st.nextToken();
            String val = st.nextToken();
            System.out.println(key + "\t" + val);
        }
    }
}

このプログラムの出力は次のとおりです。

title Java-samples 
author Emiley J 
publisher java-samples.com 
copyright 2007



delimiter が null の場合、このコンストラクターは例外をスローしないことに 注意してください。ただし、結果の StringTokenizer で他のメソッドを呼び出そうとすると、NullPointerException.

于 2012-12-14T22:06:20.873 に答える
0

入力ファイルには特定の構造のデータが含まれて:おり、区切り文字のように見えるため、トークンごとにデータを読み取り、変数に値を割り当て、さらにいくつかのresult文字列に追加します

于 2012-12-14T22:06:47.443 に答える