文本文件解析器工作不正确java

时间:2014-09-08 12:02:20

标签: java parsing

我有文本文件解析器。 和记录一样

  1111史密斯罗伯特J 1900

正常工作,结果是

ID: 1111 
LAST NAME: SMITH 
FIRST NAME: ROBERT
MIDDLE NAME: J
MONEY: 1900

但如果中间名为空,则结果为

ID: 1111 
LAST NAME: SMITH 
FIRST NAME: ROBERT
MIDDLE NAME: 1900
MONEY: 1900

代码:

StringTokenizer st = new StringTokenizer(token);
Client client = new Client();
while(st.hasMoreElements()){
    String token2 = st.nextElement().toString();
    String[] array = new String[5];
    int i = 0;
    array[i++] = new String(token2);

    String id = array[0];
    String lastName = array[1];
    String firstName = array[2];
    String middleName = array[3];
    String money = array[4];
    client.add(id);
    client.add(lastName);
    client.add(firstName);
    client.add(middleName);
    client.add(money);
}
listResult.add(client);

我如何解决它?

1 个答案:

答案 0 :(得分:1)

如果钱有特定的格式(就像在我们的情况下,它似乎是一个数字),那么你可以回溯:

  • 您每行读取N个值
  • 如果N = 5,那么你就完成了
  • 如果N = 4,你可以检查数组[3]是否是数字,在这种情况下你移位值(例如:array [4] = array [3],array [3] =“”)否则数组[ 4] = 0(“没钱”)。
  • 对于N的其他值,您必须决定该做什么。

顺便说一下,你的代码闻起来很糟糕:

String token2 = st.nextElement().toString();
String[] array = new String[4];
int i = 0;
array[i++] = new String(token2);
  1. token2已经是String,无需致电new String(token2)
  2. int i = 0; array[i++] =>将始终写相同的值。
  3. 您可以使用Arrays.fill(array, null)重用数组(例如:将第2行放在循环之前),从而避免新的对象分配。
  4. 您应该在您的客户端类上调用您的方法setFirstNamesetLastName等,而不要执行看起来像List但不是List的内容。< / LI>