java - 为什么我会收到 ArrayIndexOutOfBoundsException?

标签 java arrays exception

我读取一个文件并将其添加到一个列表中,然后读取该列表并拆分字符串并进行比较并对其执行某些操作。 我得到这个异常(exception):

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1

我应该在哪里更正我的代码?

for (Productname m : listIP) {
        if (m.getIdentifier() == null || m.getProductname() == null) {
                addToNonSimilarList( m.getProductname());
        } else {
            String id = m.getIdentifier().replaceAll("(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", " ").toUpperCase();
            String product = m.getProductname().replaceAll("(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", " ").toUpperCase();
            id = id.replaceAll("\\s+", " ");
            product = product.replaceAll("\\s+", " ");
            if (!id.equalsIgnoreCase(product)) {
                if (id.contains(" X ") && product.contains(" X ")) {
                    String[] ide = id.split(" (?=X\\s*\\d+)");
                    String[] prod = product.split(" (?=X\\s*\\d+)");
                    System.out.println(m.getMnemonic());
                    if (ide.length > 0 && prod.length > 0 && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {
                        String[] i = ide[0].split(" (?=\\d+)");
                        String[] p = prod[0].split(" (?=\\d+)");
                        if (i[0].trim().equalsIgnoreCase(p[0].trim())) {
                            //do nothing
                        } else {
                            addToNonSimilarList( m.getProductname());
                        }
                    } else {
                        addToNonSimilarList( m.getProductname());
                    }
                } else {
                    addToNonSimilarList( m.getProductname());

                }
            }
        }

    }

最佳答案

嗯,这种情况看起来很危险:

if (ide.length > 0 && prod.length > 0 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {

您正在测试每个元素中是否至少有一个元素,但您正在每个元素中使用第二个元素。

很难说出您想要实现的目标,但我怀疑您想要更改 length 条件或数组索引。为了清楚起见,我还会将此方法拆分为更短的方法,并可能创建名称良好的静态变量并引用 Pattern 对象......

编辑:如果您确实想使用每个数组中的第二个元素,我建议:

if (ide.length > 1 && prod.length > 1 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {

关于java - 为什么我会收到 ArrayIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082588/

相关文章:

java - 如何使用 mysql 数据库中的存储过程在数据库中插入图像 url?

arrays - Go:循环排序数组,sort.Sort用作值

c# - 如何找出所有可能抛出的异常(特别是 Entity Framework )

c++ - 为什么 MinGW 4.8 不将 ex.what() 视为虚拟的?

java - 异常处理冒险

java - 将 Vector 元素从一个类更改为另一类

java - 新字符串();在 java

java - Windows-1251 到 UTF-8 代码

python - 基于字典替换 NumPy 数组中的值并避免新值和键之间的重叠

java - 从文本文件读取二维字节数组时出现问题