【发布时间】:2013-10-04 14:10:04
【问题描述】:
我正在使用 Buffered Reader 将文件的各个行传递给 Java 的 StringTokenizer。文件结构如下:
"2,0";"foo";"foo.doc";"12345"
"2,4";"foo";"foo.doc";"34567";"foo7";"foo7.doc";"45678";"foo6";"foo6.doc";"56789";"foo5";"foo5.doc";"67890";"foo4";"foo4.doc";"23456"
"3,0";"foo7";"foo7.doc";"34567"
"3,0";"foo6";"foo6.doc";"45678"
"3,0";"foo5";"foo5.doc";"56789"
"3,0";"foo4";"foo4.doc";"67890"
这是我正在使用的代码。
public class parse {
public static void main(String args[]) {
FileInputStream inputStream = new FileInputStream("whidata0.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while((scrubbedInput=br.readLine())!=null) {
StringTokenizer strTok = new StringTokenizer(scrubbedInput, ";", false);
int tokens = strTok.countTokens();
while (strTok.hasMoreTokens()) {
tok01 = strTok.nextToken();
}
System.out.println(" scrubbed: " + scrubbedInput);
System.out.println(" tokens: " + tokens);
System.out.println(" tok01: " + tok01);
}
}
}
产生这个结果。
scrubbed: "2,0";"foo";"foo.doc";"12345"
tokens: 4
tok01: 12345 scrubbed: "2,4";"foo";"foo.doc";"34567";"foo7";"foo7.doc";"45678";"foo6";"foo6.doc";"56789";"foo5";"foo5.doc";"67890";"foo4";"foo4.doc";"23456"
tokens: 16
tok01: 23456
scrubbed: "3,0";"foo7";"foo7.doc";"34567"
tokens: 4
tok01: 34567
scrubbed: "3,0";"foo6";"foo6.doc";"45678"
tokens: 4
tok01: 45678
scrubbed: "3,0";"foo5";"foo5.doc";"56789"
tokens: 4
tok01: 56789
scrubbed: "3,0";"foo4";"foo4.doc";"67890"
tokens: 4
tok01: 67890
当使用nextToken() 时,起始令牌应该是什么?似乎StringTokenizer 以令牌0 开头,因此nextToken() 实际上是令牌1——第二个物理令牌。我没有在 Java 文档中看到 firstToken() 方法,也没有看到将特定标记分配给特定变量的方法(例如,String myToken = strTok.tokenNumber(0) 等)。我需要做什么才能访问我的字符串中的第一个物理令牌?
【问题讨论】:
-
此处的代码似乎不完整,也不是产生此输出的代码。例如对于此处显示的代码,第一个
"tok01: 12345"应该是tok01: "foo.doc"。 -
糟糕...剪切并粘贴了旧版本的测试文件...已在上面更新以反映我使用的正确文件。
-
这似乎更合适。您的
while (strTok.hasMoreTokens()) tok01 = strTok.nextToken();循环将每行的最后一个标记分配给tok01- 这可能是也可能不是您打算做的事情。strTok.nextToken()但是在你第一次调用它时会给你第一个令牌
标签: java stringtokenizer