8

我正在从文件中读取数据:

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(";");

事情是:当我到达第二部分Another Name;3|之后( )应该是空的,或者 (我真的不知道)。.split("\\|")args[1]null""

但是我得到一个数组索引越界错误if (args[1] != "" || args[1] != null)(再次,在Another Name;3|:)

4

6 回答 6

11

args 中只有一个元素。

if (args.length > 1) {
    字符串 inscrieriString[] = args[1].split(";");
}
于 2013-02-13T13:45:51.617 回答
4

您需要检查args数组的长度。

String.split()为您的第三行返回一个长度为 1 的数组,因此args[1]超出范围。您还应该使用String.isEmpty()而不是!= "".

最有可能的是,您甚至可以跳过额外的检查——检查数组长度就足够了:

if (args.length > 1) {
    String inscrieriString[] = args[1].split(";");
    ...
}
于 2013-02-13T13:45:34.340 回答
1

检查args拆分时的长度,并且仅在长度允许的情况下访问其他索引(如果args.length > 1)。

在这种情况下:

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

它将返回这个数组:

{ "Another Name;3" }
于 2013-02-13T13:46:07.487 回答
1

尝试

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

if (args.length==2) 
    String inscrieriString[] = args[1].split(";");
于 2013-02-13T13:46:41.800 回答
1

args[1]不为空或为空。它超出了数组的范围。

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

在使用它之前,您需要检查数组的长度。

于 2013-02-13T13:46:46.050 回答
1

我认为你可以测试 args 的长度,它应该返回 1 或 2。如果它是 1,你就知道没有 args[1]。

于 2013-02-13T13:51:03.070 回答