我正在尝试读取文件并拆分其行以获取一些上下文(计算机名称和日期),代码提供几行输出然后给出以下异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at FILE_MAIN.getComputerName(FILE_MAIN.java:34)
at FILE_MAIN.readFiles(FILE_MAIN.java:24)
at FILE_MAIN.main(FILE_MAIN.java:12)
代码:
import java.util.*;
import java.io.*;
import java.util.Scanner;
public class FILE_MAIN
{
public static void main(String[] args) throws FileNotFoundException
{
File folder = new File("folderName/");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
readFiles(listOfFiles[i].getName());
}
}
public static void readFiles(String fileName) throws FileNotFoundException
{
FileReader dataFile = new FileReader("yukt/"+fileName);
try (Scanner FileRead = new Scanner(dataFile))
{
while (FileRead.hasNextLine() && FileRead.nextLine().isEmpty()==false)
{
String[] split;
String line = FileRead.nextLine();
split = line.split("\\|",-1);
String computerName=getComputerName(split[0]);
System.out.println(computerName);
}
}
}
public static String getComputerName(String splited)
{
String[] split1;
String[] split2;
split1=splited.split("\\:",-1);
split2=split1[1].split("\\ ",-1);
return("a");
}
public static String getDate(String splited)
{
String[] split1=splited.split("\\(",-1);
String[] split2=split1[1].split("\\ ",-1);
return(split2[0]);
}
}
main函数获取文件夹中文件的名称,并将每个文件传递给readFiles函数,其中每行由分隔符(|)分成3部分,部分发送到getComputerName和getDate函数,返回其值在进一步分裂琴弦之后。
以下是文件行的示例,所有行都与此类似:
[CD8C] ComputerName:NITIN UserID:GO ankurjain Station 9900 LanId: | (11/24 19:50:30) | Client is disconnected from agent.
答案 0 :(得分:4)
对包含单个元素的split1
没有任何保护:
split1=splited.split("\\:",-1);
split2=split1[1].split("\\ ",-1); // Accesses second element of split1
添加保护并确定输入字符串中是否有:
是错误,如果没有:
则只使用整个字符串:
split1=splited.split("\\:",-1);
if (split1.length > 1)
{
split2=split1[1].split("\\ ",-1);
}
答案 1 :(得分:0)
split2=split1[1]
为您提供java.lang.
ArrayIndexOutOfBoundsException : 1
错误。该数组没有2个元素,因此1上的索引将引发错误。
你可以添加一张支票,通过将分配放在if语句中来确保它至少包含2个元素
if (split1.lenght > 1){
split2=split1[1].split("\\ ",-1);
}
答案 2 :(得分:0)
split1=splited.split("\\:",-1);
split2=split1[1].split("\\ ",-1);
split1一定不能做你想的。 即它没有分裂,cos split1 [1]无效。
在尝试使用它的结果之前,你应该检查第一次拆分的结果。
答案 3 :(得分:0)
我有类似的问题,我必须检查天气字符串子部分是否包含给定的字符串。但是有问题的String有很多变化。我没有使用if循环,而是使用了三元运算符 -
StringUtils.containsIgnoreCase("Test String",
("split me".split(":").length > 1)
? "split me".split(":")[1] : "Can't split")