当前位置: 首页 > 知识库问答 >
问题:

使用分裂()数组索引出界后,但在循环中读取数组

林鸿彩
2023-03-14

我正在写一个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();
        }
    }
}}

循环工作正常(给整行一个元素一个,然后下一行在下一行,循环迭代等等),如果我试图通过使用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);给133在每一次迭代。

共有2个答案

咸晨
2023-03-14

您的文件可能不包含制表符,而是4个空格来代替缩进列。这就是为什么按制表符拆分会给你一个大小为1的数组。试着按照这种模式拆分:

sCurrentLine.split("\\s+");

此模式包括空格和制表符。

张玺
2023-03-14

你在开账单。如果arr[1]有效,但arr[0]有效,则sCurrentLine不包含选项卡。如果你正在使用

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

那么在循环中,你不应该使用任何东西

 类似资料:
  • rank ▲ ✰ vote url 21 688 153 1320 url 在循环中获取索引(数组下标) 有人知道如何获取列表的索引值吗: ints = [8, 23, 45, 12, 78] 当我循环这个列表时如何获得它的索引下标? 如果像C或者PHP那样加入一个状态变量那就太不pythonic了. 最好的选择就是用内建函数enumerate for idx, val in enumerate

  • 我正在Android上工作。我有一个如下所示的字符串。 字符串str=“@test1 | test2|test3@test4|测试5 |测试6|test7@test8|测试9 |测试10|test11@test12|测试13 |测试14|test15@......“ 我正在使用字符串[]str1=str.split([@])将上述字符串拆分为“@” 以便最终结果 str1[0]=测试1 |测试2

  • 问题内容: 我要寻找一个量化的方式来索引的索引。 例如: 我想建立一个新的数组,以便该数组中的每一行(i)都是array的row(i),并由数组inds(i)的行索引。我想要的输出是: 我可以通过循环来实现: 但我正在寻找一种纯矢量化的解决方案。 问题答案: 使用索引数组对另一个数组进行索引时,每个索引数组的形状应与 输出 数组的形状匹配。您希望列索引匹配,并且您希望行索引匹配输出的行,例如: 由

  • 我正在为一个老式电话计划编写Java代码,所以我有: 频段类: 速率类: 我想在Rate类中编写一个方法,如果给定一周中的某一天,它将返回一个由该周中某一天的带组成的带数组。 我写的是: 但是我一直得到一个索引越界异常(索引2越界,长度为2)。 我怎么能解决这个?

  • 我是Java的新手,正在运行下面的代码,它运行得很好,但是我得到了一个数组索引超出了界限的异常。有人能帮我理解一下为什么我会得到这个例外吗?