这可能是一个愚蠢的问题,但我很难理解 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('_','_') 是否意味着只有下划线才会被视为有效单词?
在这种情况下, token 是什么?
非常感谢。
最佳答案
StreamTokenizer 如何分隔输入流。是否由空格和下一行分隔?
简短的回答是是
解析过程由一个表和许多可以设置为各种状态的标志控制。流分词器可以识别标识符、数字、带引号的字符串和各种注释样式。此外,一个实例有四个标志。其中一个标志表示行终止符是作为标记返回还是被视为仅分隔标记的空白。
text.wordChars('_','_') 是否意味着只有下划线才会被视为有效单词?
简短的回答是是
WordChars
需要两个输入。 First(low
) 是字符集的下限,second(high
) 是字符集的上限。如果 low
传递的值小于 0
,那么它将被设置为 0
。由于您传递的是 _ = 95
,因此下限将被接受为 _=95
。如果传递的 high 小于 255
,则它被接受为字符集范围的高端。由于您通过了 _=95
,这也被接受。现在,当它尝试确定从 low-to-high
的字符范围时,它只找到一个字符,即 _
本身。在这种情况下,_
将是唯一被识别为单词字符的字符。
关于java StreamTokenizer wordChars() 和 nextToken(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105873/