【问题标题】:How do access specific tokens with Java's StringTokenizer?如何使用 Java StringTokenizer 访问特定的令牌?
【发布时间】:2013-10-10 09:00:52
【问题描述】:

我正在使用 Buffered Reader 将文件的各个行传递给 Java 的 StringTokenizer。文件结构如下:

"2,0";"12345";"foo";"foo.doc"
"2,4";"23456";"foo";"foo.doc";"34567";"foo7";"foo7.doc";"45678";"foo6";"foo6.doc";"56789";"foo5";"foo5.doc";"67890";"foo4";"foo4.doc"   
"3,0";"34567";"foo7";"foo7.doc"
"3,0";"45678";"foo6";"foo6.doc"
"3,0";"56789";"foo5";"foo5.doc"
"3,0";"67890";"foo4";"foo4.doc"

这是我目前使用的代码。

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);
    }
  }
}

我需要能够将字符串中的每个标记分配给变量以进行额外的操作。但是,如果我在 while 循环中分配这些变量,则迭代将覆盖我的变量,并且它们都将返回相同的值。

我正在尝试设计一种方法来执行以下操作:

String token01 = strTok.tokenNumber(0);
String token02 = strTok.tokenNumber(1);
String token03 = strTok.tokenNumber(2);
String token04 = strTok.tokenNumber(3);
etc.

但在 String Tokenizer 文档中找不到任何允许这样做的方法。我当然可以将每一行写入thisLineOfTokens[] 的String 数组并使用for 循环来创建String tokenN = thisLineOfTokens[n],但是有没有更直接的方法来访问特定的令牌?

我有点不知道从我的字符串中引用特定令牌的最佳方法。

【问题讨论】:

  • 永远不要使用==进行对象比较,使用.equals()
  • 真正的数据,真正的数据......但我只是敲出一些伪代码&将在我的示例中澄清这一点。

标签: java variable-assignment stringtokenizer


【解决方案1】:

您可以使用String.split 代替StringTokenizer

String[] split = scrubbedInput.split(";");

split[2]; //index=2

【讨论】:

  • 这个答案是对的。事实上@dwwilson66 你使用 StringTokenizer 的方式是错误的。它就像在迭代器中一样,您循环遍历它并获取它们的值。您特别想要的是 .split() ,您可以在其中取出特定索引处的值。加上他们说使用 .split() 而不是分词器的 JavaDocs。
【解决方案2】:

来自here的信息:

建议任何寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。

所以,你可以使用这样的东西:

String testLine = "your;test;data;"

String[] result = testLine.split(";");
for (int x=0; x<result.length; x++){
    System.out.println(result[x]);
}

输出:

your
test
data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2019-09-29
    相关资源
    最近更新 更多