我正在使用缓冲读取器将文件的各个行传递给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)等)分配特定标记的方法。我需要做什么来访问字符串中的第一个物理令牌?

最佳答案

您的代码不会反映输出,但是当您想访问任意令牌时,无论如何您都想使用String.split()函数而不是令牌生成器,例如:

    String st = "a;b;c";
    String[] tokens = st.split(";");
    System.out.println(tokens[0]);


将打印出第一个标记“ a”。

StringTokenizer类仅允许在令牌之后访问令牌,您不能以随机访问的方式访问令牌。但是您也可以使用它来访问第一个令牌:

    String st = "a;b;c";
    StringTokenizer tokenizer = new StringTokenizer(st,";");
    System.out.println(tokenizer.nextToken());


还将打印出第一个令牌“ a”。

10-06 09:03
查看更多