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?

简短的回答是肯定的

解析过程由一个表和许多可以设置为各种状态的标志控制。流标记器可以识别标识符、数字、带引号的字符串和各种注释样式。此外,一个实例有四个标志。其中一个标志指示行终止符是作为标记返回还是被视为仅分隔标记的空格。

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

简短的回答是肯定的

WordChars需要两个输入。first( low) 是字符集的下端, second( high) 是字符集的上端。如果low传递的值小于0then 它将被设置为0. 既然你通过_ = 95了,低端将被接受为_=95。如果通过的 high 小于255然后它被接受为字符集范围的高端。由于您的成绩很高_=95,因此也可以接受。现在,当它试图从 中确定字符范围时low-to-high,它只找到一个字符,即它_自己。在这种情况下,_将是唯一被识别为单词字符的字符。

于 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 回答