Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我要从BoundsException中获取ArrayIndex?_Java_Arrays_Exception - Fatal编程技术网

Java 为什么我要从BoundsException中获取ArrayIndex?

Java 为什么我要从BoundsException中获取ArrayIndex?,java,arrays,exception,Java,Arrays,Exception,我读取一个文件并将其添加到列表中,然后读取列表并拆分字符串,比较它并对其进行处理。 我得到一个例外: 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:1 我应该在哪里更正代码? for (Productname m : listIP) { if (m.getIdentifier() == null || m.getProductname() == null) { addToNonSimila

我读取一个文件并将其添加到列表中,然后读取列表并拆分字符串,比较它并对其进行处理。 我得到一个例外:

线程“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());

                }
            }
        }

    }
(Productname m:listIP)的
{
如果(m.getIdentifier()==null | | m.getProductname()==null){
addToNonSimilarList(m.getProductname());
}否则{

String id=m.getIdentifier().replaceAll((?好吧,这个条件看起来不可靠:

if (ide.length > 0 && prod.length > 0 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {
您正在测试每个元素中是否至少有一个元素,但您正在每个元素中使用第二个元素

很难说您想要实现什么,但我怀疑您可能想要更改
长度
条件或数组索引。为了清晰起见,我还将此方法拆分为较短的方法,并可能创建引用
模式
对象的命名良好的静态变量

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

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

如果长度等于1,则ide[0]和prod[0]可以访问第一个元素。但是,您分别使用ide[1]和prod[1]。这就是错误产生的原因。

Yes我应该检查这两个
ide[1]prod[1]中的第二个元素是否
都是一样的。什么是更好的方法?@itro:检查每个数组中是否至少有两个元素,而不是至少一个。当我删除
ide.length>0和&prod.length>0时,我会得到相同的错误。我需要检查每个拆分的第二个元素。什么是最好的方法?您假设第一个元素是一个元素因此,在条件下使用ide[0]和prod[0],而不是ide[1]和prod[1]
 if (ide.length > 0 && prod.length > 0 && ide[1].trim().equalsIgnoreCase(prod[1].trim()))