2

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

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

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

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

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

4 回答 4

3

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

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

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

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

于 2008-10-25T13:46:49.283 回答
2

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

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

于 2008-10-25T13:22:10.123 回答
1

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

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

于 2008-10-25T13:17:12.490 回答
0

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

于 2008-10-25T13:19:12.877 回答