stringTokenizer将一行文本拆分为预定义变量的最佳方法是什么

时间:2008-10-25 13:14:07

标签: java string tokenize

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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