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

第一个问题是该行中的最后两个字段可能存在也可能不存在,因此我需要使用stringTokenizer.hasMoreTokens执行某些操作,否则当字段7和8不存在时它将会混乱。

我理想情况下喜欢在for循环中执行它,但我不知道如何告诉该循环字段的顺序是什么,因此它可以正确填充所有8(或6)个字符串。请告诉我使用8个嵌套if语句的更好方法!

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

line[1] = isbn;
line[2] = title;
有帮助吗?

解决方案

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

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

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

tokens 现在将有6到8个字符串。使用 tokens.length()查找数量,然后从数组中创建对象。

其他提示

正则表达式就是这样。您可以使用split方法将传入的String转换为String数组

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

带有捕获组的正则表达式是否适合您?你当然可以将表达式的一部分作为可选项。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top