指数超出范围

时间:2017-09-20 18:36:00

标签: java

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

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

想要输出: axbycz rasbtcuavbwcxayb rasbtaubva

错误我得到了:

arbsctException in thread" main" 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&#34; main&#34;   java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:   3在java.lang.String.charAt(未知来源)at   test.main(test.java:39)

3 个答案:

答案 0 :(得分:1)

第二个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

答案 1 :(得分:1)

我想这就是你想要做的。请注意,循环使用最小长度。您可以使用substr。

打印任何一个字符串的多余部分
private void merge( s1 String, s2 String ){
    int len = Math.min( s1.length(), s2.length() );
    for( int i = 0; i < len; ++i ){
        System.out.print( s1.charAt(i) + s2.charAt(i) );
    }
    System.out.println( s1.substr(len) + s2.substr(len) );
}

答案 2 :(得分:0)

#Python 程序

IndexError: 列表索引超出范围

示例:

团队 =["priya","amanda","sruthy"]

打印(团队[3])

如果您尝试在 3 的位置打印值,则会出现索引错误 发生这种情况是因为这超出了您的列表大小,并且列表索引从零开始。