我正在从文件中读取数据:
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
)应为空时,""
或{{ 1}}(我真的不知道)。
然而我在if (args[1] != "" || args[1] != null)
上获得了一个数组索引超出范围的错误(同样在:Another Name;3|
)
答案 0 :(得分:7)
args中只有一个元素。
if (args.length > 1) { String inscrieriString[] = args[1].split(";"); }
答案 1 :(得分:4)
您需要检查args
数组的长度。
String.split()
为第三行返回长度为1的数组,以便args[1]
超出范围。
您还应该使用String.isEmpty()
代替!= ""
。
最有可能的是,您甚至可以跳过额外的检查 - 检查数组长度应该足够了:
if (args.length > 1) {
String inscrieriString[] = args[1].split(";");
...
}
答案 2 :(得分:1)
分割时检查args
的长度,如果长度允许,则仅访问另一个索引(如果是args.length > 1
)。
在这种情况下:
String line = "Another Name;3|"; //simplified for the example
line.split("\\|");
它将返回此数组:
{ "Another Name;3" }
答案 3 :(得分:1)
尝试
String args[] = line.split("\\|",2);
String candidatArgs[] = args[0].split(";");
if (args.length==2)
String inscrieriString[] = args[1].split(";");
答案 4 :(得分:1)
args[1]
不为空或为空。它超出了数组范围。
System.out.println("Another Name;3|".split("\\|").length);
在使用之前,您需要检查数组的长度。
答案 5 :(得分:1)
我认为你可以测试args的长度,它应该返回1或2.如果它是1你就知道没有args [1]。