这可能是一个愚蠢的问题,但我很难识别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('_','_')是否仅将下划线视为有效单词?
在这种情况下,代币将是什么?
非常感谢你。
最佳答案
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
的值小于0
,则将其设置为0
。由于您通过了_ = 95
,因此低端将被接受为_=95
。如果传递的上限小于255
,则将其视为字符集范围的上限。由于您的_=95
很高,因此也可以接受。现在,当尝试从low-to-high
确定字符范围时,它仅找到一个字符,即_
本身。在这种情况下,_
将是唯一被识别为单词字符的字符。