2013-02-13 69 views
3

我從一個文件中讀取數據:如何驗證是否string.split()返回null

Some Name;1|IN03PLF;IN02SDI;IN03MAP;IN02SDA;IN01ARC 
Some Other Name;2|IN01ALG;IN01ANZ 
Another Name;3| 
Test Testson;4|IN03MAP;IN01ARC;IN01ALG 

我用string.split(),每行我從文件中讀取,像這樣:

String args[]   = line.split("\\|");     
String candidatArgs[] = args[0].split(";"); 

if (args[1] != "" || args[1] != null) { 

    String inscrieriString[] = args[1].split(";"); 

事情是:當我.split("\\|")第二部分(args[1])後達到Another Name;3|應該是空的,要麼null""(我真的不知道)。

然而我對if (args[1] != "" || args[1] != null)得到一個數組索引越界錯誤的(再次,在:Another Name;3|

+2

從您發佈的示例數據中可以得到長度爲1的'String.split'數組。您需要在代碼中對此進行綁定檢查。 – Perception 2013-02-13 13:46:21

回答

7

的ARGS將只有一個元素在裏面。

 
if (args.length > 1) { 
    String inscrieriString[] = args[1].split(";"); 
} 
4

你需要檢查你的args數組的長度。

String.split()返回第三行的長度爲1的數組,因此args[1]超出範圍。 您還應該使用String.isEmpty()而不是!= ""

最有可能的,你甚至可以跳過你額外的檢查 - 檢查數組的長度應該是足夠了:

if (args.length > 1) { 
    String inscrieriString[] = args[1].split(";"); 
    ... 
} 
+0

的確,請檢查您的參數數組大小> 1.如果不是,請執行此代碼。 – Joetjah 2013-02-13 13:46:49

1

檢查分裂和如果長度允許它(如果args.length > 1)只訪問其他索引時的args長度。

在這種情況下:

String line = "Another Name;3|"; //simplified for the example 
line.split("\\|"); 

它會返回這個數組:

{ "Another Name;3" } 
1

嘗試

String args[]   = line.split("\\|",2);     
String candidatArgs[] = args[0].split(";"); 

if (args.length==2) 
    String inscrieriString[] = args[1].split(";"); 
1

args[1]不爲空或空。它在數組中超出範圍。

System.out.println("Another Name;3|".split("\\|").length); 

您需要在使用之前檢查數組的長度。

1

我認爲你可以測試參數的長度,它應該返回1或2.如果它是1,你就知道沒有參數[1]。