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);
}
Author by
user1291156
Updated on June 04, 2022Comments
-
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.