我不确定标题是否非常清楚,但基本上我要做的是从文件中读取一行文本并将其拆分为8个不同的字符串变量。每行将以相同的顺序(标题,作者,价格等)具有相同的8个块。因此,对于每行文本,我想最终得到8个字符串。
第一个问题是该行中的最后两个字段可能存在也可能不存在,因此我需要使用stringTokenizer.hasMoreTokens执行某些操作,否则当字段7和8不存在时它将会混乱。
我理想情况下喜欢在for循环中执行它,但我不知道如何告诉该循环字段的顺序是什么,因此它可以正确填充所有8(或6)个字符串。请告诉我使用8个嵌套if语句的更好方法!
编辑:String.split解决方案似乎绝对是它的一部分,所以我将使用它而不是stringTokenizer。但是,我仍然不确定将单个字符串输入构造函数的最佳方法是什么。最好的方法是让类期望一个数组,然后在构造函数中做这样的事情:line[1] = isbn;
line[2] = title;
答案 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 []。只需检查数组大小即可知道存在哪些可选字段。