java - Java 使用 split 时出现 ArrayIndexOutOfBoundsException

标签 java string split indexoutofboundsexception

我正在尝试读取文件并拆分其行以获取一些上下文(计算机名称和日期),代码给出了几行输出,然后给出了以下异常:

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

主函数获取文件夹中文件的名称,并将每个文件传递给 readFiles 函数,其中每行由分隔符 (|) 分成 3 部分,并将各部分发送到 getComputerName 和 getDate 函数,后者返回其值进一步分割字符串后。

这是文件中一行的示例,所有行都与此类似:

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

最佳答案

对于包含单个元素的 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);
} 

关于java - Java 使用 split 时出现 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859669/

相关文章:

java - 为什么将 (EditText) findViewById 转换为 (EditText)?

python - 在 Python 中将字符串拆分为列表(但不分隔相邻数字)

c - 这段代码在 C 中是如何工作的

c# - 在 Linq where 子句中使用带有字符串的 switch-case

python - 如何加速 pandas 字符串函数?

ruby - 如何在 ruby​​ 中拆分字符串,如下例所示?

Java 全屏模式对话框

java - 尝试声明 BottomNavigationView

java - 了解以毫秒为单位的 XMLGregorianCalendar/GregorianCalendar 时间

Perl 在第一次出现时拆分