java - 索引超出范围

标签 java

我希望我的程序与数组中的字符串混合。这些字符串来自 .dat 文件。我不断收到索引超出范围错误。

输入文件: 3 XYZ abc abc rstuvwxy rstuv ab

想要的输出: 阿克斯比茨 拉斯btcuavbwcxayb 拉斯btaubva

我遇到的错误:

线程“main”中的arbsctException java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3 在 java.lang.String.charAt(来源未知) 在 test.main(test.java:39)

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class test {

    public static void main(String[] args) throws FileNotFoundException {

        File file = new File("strings.dat");
        Scanner infile = new Scanner(file);
        String string1;
        String[] mingle = new String[2];
        int length;

        infile.nextLine();

        while (infile.hasNextLine()) {
            string1 = infile.nextLine();

            for (int i = 0; i < mingle.length; i++) {
                mingle = string1.toLowerCase().split("[\\s.]");
            }

            System.out.println(mingle[1] + mingle[0]);

            if (mingle[0].length() > mingle[1].length()) {
                length = mingle[0].length();
            }

            else if (mingle[1] == mingle[0]) {
                length = mingle[1].length();
            }

            else {
                length = mingle[1].length();
            }

            for (int i = 0; i < length; i++) {
                System.out.print(mingle[0].charAt(i % length));
                System.out.print(mingle[1].charAt(i % length));
            }
        }
        infile.close();
    }
}
<小时/>

后续错误

arbsctException in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3 at java.lang.String.charAt(Unknown Source) at test.main(test.java:39)

最佳答案

第二个 for 循环并不总是有效。由于 length 的值要么是 Mingle[0] 的长度,要么是 Mingle[1] 的长度,因此不能将这两个数组元素放在同一个循环中。

例如。假设 Mingle[0] 的长度为 10,而 Mingle[1] 的长度为 11。由于 Mingle[1] 的长度较大,因此 length 的值为“11”。 在本例中,在 for 循环的第 11 次迭代时(即当 i=10 时),则

//At 11th iteration, i=10, length=11
    for (int i = 0; i < length; i++) {
      System.out.print(mingle[0].charAt(i % length)); //equivalent of mingle[0].charAt(10)
      System.out.print(mingle[1].charAt(i % length));//equivalent of mingle[1].charAt(10)
    }

由于 Mingle[0] 中的字符可以从 0-9 访问,因此当访问第 10 个元素时,您会得到 java.lang.StringIndexOutOfBoundsException

关于java - 索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329438/

相关文章:

java - Spring Data Jpa findOne 方法返回托管实体吗?

java - 在哪里运行MapReduce作业

java - 无法将问题通过方法调用转换转换为char [] []

java - 为什么 Java ThreadPoolExecutor 会覆盖 finalize()

java - 从列表中删除具有相同内容(自定义 .equals() )的重复项的快速方法

java - 在不提示父级的情况下克服 "Can not construct instance of InterfaceClass"

java.lang.IndexOutOfBoundsException : Invalid index 2, 大小为 2 错误

java - FIFO代码解释

java - "one word"Android/Java 中的单例访问?

javafx场景中的javafx线程异常