Java 拆分字符串时避免数组索引越界异常

Java 拆分字符串时避免数组索引越界异常,java,string,split,substring,Java,String,Split,Substring,我试图读取一个文件,并逐行拆分字符串行。这是文件中的示例字符串 Decorative Platters--------Home & Kitchen->Home & Décor->Home Décor Accents Hookah--------Watches & Jewellery->Fashion Jewellery->Bangles hookah-------- 在这种情况下,第三行在点之后没有任何内容 private static vo

我试图读取一个文件,并逐行拆分字符串行。这是文件中的示例字符串

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循环中为空。这还不够吗?

当您编写以下行时,您假设元素存在,但在您的示例中它根本不存在,并且
if
语句本身会出现异常

if(!(eachLine.split("--------")[1].isEmpty()))
相反,请检查
split()
的返回值的长度


当您编写以下行时,您假设元素存在,但在您的示例中它根本不存在,并且
if
语句本身会出现异常

if(!(eachLine.split("--------")[1].isEmpty()))
相反,请检查
split()
的返回值的长度


当您编写以下行时,您假设元素存在,但在您的示例中它根本不存在,并且
if
语句本身会出现异常

if(!(eachLine.split("--------")[1].isEmpty()))
相反,请检查
split()
的返回值的长度


当您编写以下行时,您假设元素存在,但在您的示例中它根本不存在,并且
if
语句本身会出现异常

if(!(eachLine.split("--------")[1].isEmpty()))
相反,请检查
split()
的返回值的长度

建议:

  • 不执行tempString=eachLine.split(“----------”);多次,每次执行此操作时,它会一次又一次地拆分线路(代价高昂的操作)。因此,始终拆分一次,并尝试重复使用以下示例中提到的结果
  • 如果数组长度未知,请使用array.length查找并添加适当的条件
  • 样本:

    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);
    }
    
    建议:

  • 不执行tempString=eachLine.split(“----------”);多次,每次执行此操作时,它会一次又一次地拆分线路(代价高昂的操作)。因此,始终拆分一次,并尝试重复使用以下示例中提到的结果
  • 如果数组长度未知,请使用array.length查找并添加适当的条件
  • 样本:

    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);
    }
    
    建议:

  • 不执行tempString=eachLine.split(“----------”);多次,每次执行此操作时,它会一次又一次地拆分线路(代价高昂的操作)。因此,始终拆分一次,并尝试重复使用以下示例中提到的结果
  • 如果数组长度未知,请使用array.length查找并添加适当的条件
  • 样本:

    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);
    }
    
    建议:

  • 不执行tempString=eachLine.split(“----------”);多次,每次执行此操作时,它会一次又一次地拆分线路(代价高昂的操作)。因此,始终拆分一次,并尝试重复使用以下示例中提到的结果
  • 如果数组长度未知,请使用array.length查找并添加适当的条件
  • 样本:

    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);
    }
    

    对于第三种情况,
    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);
    }
    

    对于第三种情况,
    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);
    }
    

    对于第三种情况,
    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);
    }
    

    对于第三种情况,
    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);
    }
    

    我想您需要
    if(eachLine.split(“----------”).length>1)
    那里--
    length
    是数组的属性,而不是方法。(修正太小,无法提交编辑。)@Ben,谢谢!我修复了它。我想您需要
    如果(eachLine.split(“----------”).length>1)
    那里--
    length
    是数组的属性,而不是方法。(修正太小,无法提交编辑。)@Ben,谢谢!我修复了它。我想您需要
    如果(eachLine.split(“----------”).length>1)
    那里--
    length
    是数组的属性,而不是方法。(修正太小,无法提交编辑。)@Ben,谢谢!我修复了它。我想您需要
    如果(eachLine.split(“----------”).length>1)
    那里--
    length
    是数组的属性,而不是方法。(修正太小,无法提交编辑。)@Ben,谢谢!我修好了。