2

これはばかげた質問かもしれませんが、StreamTokenizer が入力ストリームを区切る方法を認識するのに苦労しています。スペースとネクストラインで区切られていますか?wordChars() の使用についても混乱しています。例えば:

public static int getSet(String workingDirectory, String filename, List<String> set) {
    int cardinality = 0;
    File file = new File(workingDirectory,filename);
    try {
        BufferedReader in = new BufferedReader(new FileReader(file));
        StreamTokenizer text = new StreamTokenizer(in);
        text.wordChars('_','_');
        text.nextToken();
        while (text.ttype != StreamTokenizer.TT_EOF) {
            set.add(text.sval);
            cardinality++;
//              System.out.println(cardinality + " " + text.sval);
            text.nextToken();
        }
        in.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return cardinality; 
}

テキスト ファイルに A_B_C D_E_F という文字列が含まれている場合。

text.wordChars('_','_') は、アンダースコアのみが有効な単語と見なされることを意味しますか?

この場合、トークンは何になりますか?

どうもありがとうございました。

4

2 に答える 2

1

how StreamTokenizer delimit input streams. Is it delimited by space and nextline?

短い答えはイエスです

解析プロセスは、テーブルと、さまざまな状態に設定できるいくつかのフラグによって制御されます。ストリーム トークナイザーは、識別子、数字、引用符で囲まれた文字列、およびさまざまなコメント スタイルを認識できます。さらに、インスタンスには 4 つのフラグがあります。フラグの 1 つは、行末記号をトークンとして返すか、単にトークンを区切る空白として扱うかを示します。

Does text.wordChars('_','_') mean only underscore will be considered as valid words?

短い答えはイエスです

WordChars2 つの入力を取ります。First( low) は文字セットの下端、second( high) は文字セットの上端です。lowより小さい値で が渡された場合、に0設定され0ます。合格ですので_ = 95、下端は と認めます_=95。high がそれよりも小さい値で渡された場合255、文字セット範囲の上限として受け入れられます。あなたは として高く合格しているので_=95、これも受け入れられます。から文字の範囲を決定しようとするとlow-to-high、それ自体である 1 つの文字のみが検出され_ます。その場合、_単語文字として認識される文字は だけになります。

于 2012-10-28T04:02:09.313 に答える
0

これをチェックしてください

Pattern splitRegex = Pattern.compile("_");
String[] tokens = splitRegex.split(stringtobesplitedbydelimeter); 

または使用することもできます

   String[] tokens = stringtobesplitedbydelimeter.split('_')
于 2012-10-28T02:34:59.390 に答える