【问题标题】:What's the best way to have stringTokenizer split up a line of text into predefined variables让 stringTokenizer 将一行文本拆分为预定义变量的最佳方法是什么
【发布时间】:2010-09-19 04:19:42
【问题描述】:

我不确定标题是否很清楚,但基本上我要做的就是从文件中读取一行文本并将其拆分为 8 个不同的字符串变量。每行将有相同的 8 个块以相同的顺序(标题、作者、价格等)。所以对于每一行文本,我想以 8 个字符串结尾。

第一个问题是该行的最后两个字段可能存在也可能不存在,所以我需要对stringTokenizer.hasMoreTokens做一些事情,否则当字段7和8不存在时它会乱七八糟地死掉。

理想情况下,我希望在 for 循环的一段时间内执行此操作,但我不确定如何告诉该循环字段的顺序是什么,以便它可以正确填充所有 8 个(或 6 个)字符串.请告诉我使用 8 个嵌套 if 语句有更好的方法!

编辑:String.split 解决方案似乎肯定是其中的一部分,所以我将使用它而不是 stringTokenizer。但是,我仍然不确定将单个字符串输入构造函数的最佳方法是什么。最好的方法是让类期待一个数组,然后在构造函数中做这样的事情:

line[1] = isbn;
line[2] = title;

【问题讨论】:

  • 我们需要查看您的数据样本以做出明智的选择。您可以控制数据格式吗?

标签: java string tokenize


【解决方案1】:

这是 CSV 或类似文件吗?如果是这样,有一些库可以帮助您,例如 Apache Commons CSV(也可以链接到他们页面上的替代方案)。它会为文件中的每一行提供一个 String[] 。只需检查数组大小即可了解存在哪些可选字段。

【讨论】:

    【解决方案2】:

    最好的方法是根本不使用StringTokenizer,而是使用String 的split 方法。它返回一个字符串数组,您可以从中获取长度。

    对于文件中的每一行,您可以执行以下操作:

    String[] tokens = line.split("#");
    

    tokens 现在将有 6 - 8 个字符串。使用tokens.length() 找出有多少,然后从数组中创建您的对象。

    【讨论】:

      【解决方案3】:

      正则表达式是一种方式。您可以使用 split 方法将传入的字符串转换为字符串数组

      http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)

      【讨论】:

        【解决方案4】:

        带有捕获组的正则表达式对您有用吗?您当然可以将表达式的某些部分设为可选。

        一或三行数据可能会有所帮助。

        【讨论】:

          猜你喜欢
          • 2019-09-18
          • 2020-11-21
          • 2018-11-05
          • 1970-01-01
          • 2013-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-28
          相关资源
          最近更新 更多