ArrayIndexOutOfBoundsException in Java when using split

15,047

There is no protection for split1 containing a single element:

split1=splited.split("\\:",-1);
split2=split1[1].split("\\ ",-1); // Accesses second element of split1

Add protection and decide if it is an error for there to be no : in the input string or just use whole string if no ::

split1=splited.split("\\:",-1);
if (split1.length > 1)
{
    split2=split1[1].split("\\ ",-1);
} 
Share:
15,047
user1291156
Author by

user1291156

Updated on June 04, 2022

Comments

  • user1291156
    user1291156 almost 2 years

    I am trying to read file and split its line to get some context(Computer Name and Date), the code gives few lines of outputs then gives the following exception:

    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)
    

    Code:

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

    The main function gets names of the files in a folder, and passes each file to the readFiles function where each line is split into 3 parts by a delimeter(|) and parts are send to getComputerName and getDate function which returns its values after further splitting the strings.

    Here is an example of a line of the file, all the lines are similar to this:

    [CD8C] ComputerName:NITIN UserID:GO ankurjain Station 9900  LanId: | (11/24 19:50:30) | Client is disconnected from agent.