gpt4 book ai didi

java - 使用 split() 数组索引越界后但在循环中读取数组

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:23 24 4
gpt4 key购买 nike

我正在编写一个java代码,它从列中的文件中读取文本,但是当尝试运行该代码时,会显示越界错误。仅当我尝试使用命令:arr[1](或更高的索引)时才会发生这种情况。奇怪的是下面的代码工作正常:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadingColumns {
public static void run(){
BufferedReader br = null;
String[] characters = new String[10000];

try {

String sCurrentLine;
br = new BufferedReader(new FileReader("C:\\Users\\wyn_005 trans.tif.txt"));

int i=0;
while ((sCurrentLine = br.readLine()) != null) {

String[] arr = sCurrentLine.split("\\t");

for(int j=0;j<arr.length;j++){
System.out.println(arr[j]);
}
// System.out.println(sCurrentLine);
// System.out.println("arr[0] = " + arr[0]);
// System.out.println(arr[2]);

i++;
}

} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}}

`循环工作正常(给出整行一个元素,然后给出下一个 while 循环迭代中的下一行,依此类推),如果我尝试使用 arr[0] 输入,它也很好,但只给出第一列。

`System.out.println(sCurrentLine)`

提供了整个文件,所以我知道它没有丢失任何内容。该文件或多或少看起来像这样:

Frame             X1   Y1   Marker1 R1    X2   Y2  Marker2 R2...
Data from 1 to 20
1 1.0 2.0 3.2 4.0 3.1 * 5.5
2 3.3 1.2 4.1 1.1 2.1 1.3
...

(抱歉,我不知道如何在此处用制表符分隔列,因此它是用空格制成的。)谁能告诉我为什么会发生这种情况?我对 java 相当陌生,所以也许我错过了一些简单的东西。

编辑:当我取消注释行 System.out.println(arr[2]); 时引发异常System.out.println(arr.length);每次 while 迭代都会给出 133。

最佳答案

您正在一个选项卡上进行拆分。如果 arr[1] 有效,但 arr[0] 有效,则 sCurrentLine 不包含制表符。如果您正在使用

for(int j=0;j<arr.length;j++){

那么在循环中你不应该使用任何东西> arr.length,在这个错误情况下,它是1。所以你可以安全地使用arr[j],但你不能任意使用任何arr[number],除非你验证该数字在范围(0, arr.length)内。

关于java - 使用 split() 数组索引越界后但在循环中读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com