我希望我的程序与数组中的字符串混合。这些字符串来自 .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/