我正在尝试读取文件并逐行拆分字符串。这是文件中的示例字符串
Decorative Platters--------Home & Kitchen->Home & Décor->Home Décor Accents
Hookah--------Watches & Jewellery->Fashion Jewellery->Bangles
hookah--------
在这种情况下,第三行在点之后没有任何东西。
private static void getCategoriesFromFileAndMAtch() {
try {
BufferedReader br=new BufferedReader(new FileReader("mapping_log"));
String eachLine;
while((eachLine = br.readLine()) != null)
{
String input1, input2, tempString;
input1=eachLine.split("--------")[0];
tempString=eachLine.split("--------")[1];
if(!(eachLine.split("--------")[1].isEmpty()))
{
tempString=eachLine.split("--------")[1].split("::=>")[0];
System.out.println(input1+" "+tempString);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
因为[1]的值为空我得到异常并且程序停止。我怎么能避免这种情况?我在if循环中检查它是否为空。这还不够吗?
答案 0 :(得分:2)
当您编写以下行时,您假设该元素存在,但在您的情况下根本不存在,并且if
语句本身会因异常而爆炸。
if(!(eachLine.split("--------")[1].isEmpty()))
相反,请检查split()
的返回值的长度。
if(eachLine.split("--------").length > 1)
答案 1 :(得分:1)
建议:
样品:
String input1, input2, tempString;
String [] parts = eachLine.split("--------");
input1 = parts[0];
if (parts.length > 1) {
input2 = parts[0];
tempString=input2.split("::=>")[0];
System.out.println(input1 + " " + tempString);
}
答案 2 :(得分:0)
对于第三种情况,eachLine.split("--------")
将返回长度为1的数组,因此当您访问索引为1的数组时,即
eachLine.split("--------")[1]
它给出了一个例外。您可以先检查split函数返回的数组是否大于1
if(eachLine.split("--------").length > 1 && !(eachLine.split("--------")[1].isEmpty()))
{
tempString=eachLine.split("--------")[1].split("::=>")[0];
System.out.println(input1+" "+tempString);
}