2011-07-13 26 views
1

我有一个读取管道分隔文件的要求,并将它填充到字符串数组中,并将其作为列表传回并在下面进一步处理 。Java空值导致读取管道分隔文件时出现问题

Sample data : X|ABCD|001111006|1111006|ABC|test006| | | | | |C||||||||||||| 
    Note : Sample data can have both NULL and space between pipe 

这是工作正常,如果数据是在所有的管区划界定可用,至少一个空间, 但在管之间的空值

有26个属性和每当有NULL阵列索引不是 从NULL可用的基数增加。说时,有12个管阵列未填充,直到25 NULL它停在12,这在我的进一步处理

craeting问题和文件可以同时具有NULL和空间。你能不能帮我解决这个问题

public List<String[]> readFile(String FileName) { 

final List<String[]> userList = new ArrayList<String[]>(); 
BufferedReader bufferedreader = null; 
try { 

    int i=0; 
    bufferedreader = new BufferedReader(new FileReader(FileName)); 
    String line = null; 

    while ((line = bufferedreader.readLine()) != null) {  
      final String[] values = line.split("\\|"); 
      userList.add(values); 
     } 
} 
catch (FileNotFoundException ex) { 
    CTLoggerUtil.logError(ex.getMessage()); 
} 
catch (IOException ex) { 
    CTLoggerUtil.logError(ex.getMessage()); 
} 
finally { 
    try { 
    if (bufferedreader != null) 
    { 
     bufferedreader.close();} 
    } 
    catch (IOException ex) { 
     CTLoggerUtil.logError(ex.getMessage()); 


    } 
} 

return userList; 
    } 
+1

String.split()的文档说连续的分隔符不被视为一个。你可以检查分割后的值是多少? – SJuan76

回答

3

默认情况下,String.split()丢弃空尾随字符串。如果你设置了一个负数限制,你也会得到所有空的结果:

final String[] values = line.split("\\|", -1); 
+0

感谢这工作。这正是我想要的。还有空间代替空值。有没有什么办法可以保留输入NULLS为空值和空间输入作为空间还是不可能?非常感谢您的帮助 – user549432

+0

使用以上方法你的数组将包含“”的空间,“”(空字符串)为空值。所以你可以区分两者。如果你的问题是,如果分割实际上可以把空数组中的每一个空值(而不是空字符串),我认为答案是否定的。 –