【问题标题】:Vector out of bounds while reading a TXT file读取 TXT 文件时矢量越界
【发布时间】:2016-09-29 04:11:58
【问题描述】:

我正在尝试读取 .TXT 文件的值并将这些值存储在各种向量中(文件中的值用逗号分隔,我使用 .Split () 方法获取这些值),我出现的问题是我的向量辅助在第一次写入后超出了限制。

代码:

String[] iltxt = new String[49];
String[] ertxt = new String[49];
String[] tcsetxt = new String[49];
String[] arttxt = new String[49];
String[] rmtxt  = new String[49];
String[] burtxt  = new String[49];
String[] toftxt = new String[49];
String[] atgtxt = new String[49];
String[] nrtxt = new String[49];
String[] hlab27txt = new String[49];
String[] djtxt = new String[49];
String[] dltxt = new String[49];
String[] rctxt = new String[49];
String[] dctxt = new String[49];
String[] mobtxt = new String[49];
String[] dtstxt = new String[49];
String[] sintxt = new String[49];
String[] diagnosticotxt = new String[49];
String[] aux = new String[18];
int cont = 1;  
      try {
      FileReader arq = new FileReader("File.txt");
      BufferedReader lerArq = new BufferedReader(arq);
      String linha = lerArq.readLine(); 
      aux = linha.split(",");
      //STORES THE VALUES OF THE FIRST LINE INTO THE VECTORS
      dltxt[0] = aux[0];
      rctxt[0] = aux[1];
      dctxt[0] = aux[2];
      mobtxt[0] = aux[3];
      dtstxt[0] = aux[4];
      iltxt[0] = aux[5];
      ertxt[0] = aux[6];
      tcsetxt[0] = aux[7];
      arttxt[0] = aux[8];
      rmtxt[0] = aux[9];
      burtxt[0] = aux[10];
      toftxt[0] = aux[11];
      sintxt[0] = aux[12];
      atgtxt[0] = aux[13];
      nrtxt[0] = aux[14];
      hlab27txt[0] = aux[15];
      djtxt[0] = aux[16];
      diagnosticotxt[0] = aux[17];
      //CLEAN THE VECTOR AUX TO THE NEXT READ
      aux = null;
      while (linha != null) {
            //READ THE VALUES OF THE SECOND TO THE LAST LINE AND STORES INTO THE VECTORS
            linha = lerArq.readLine(); 
            aux = linha.split(",");
            dltxt[cont] = aux[0];
            rctxt[cont] = aux[1];
            dctxt[cont] = aux[2];
            mobtxt[cont] = aux[3];
            dtstxt[cont] = aux[4];
            iltxt[cont] = aux[5];
            ertxt[cont] = aux[6];
            tcsetxt[cont] = aux[7];
            arttxt[cont] = aux[8];
            rmtxt[cont] = aux[9];
            burtxt[cont] = aux[10];
            toftxt[cont] = aux[11];
            sintxt[cont] = aux[12];
            atgtxt[cont] = aux[13];
            nrtxt[cont] = aux[14];
            hlab27txt[cont] = aux[15];
            djtxt[cont] = aux[16];
            diagnosticotxt[cont] = aux[17];
            //CLEAN THE AUX VECTOR
            aux = null;
            //INCREMENT THE COUNTER TO SAVE VALUES IN THE NEXT POSITIONS OF THE VECTORS
            cont++;
      }
      arq.close();
      } catch (IOException e) {
            System.err.printf("Error while open the file: %s.\n",
            e.getMessage());
      }

TXT 文件的值:

Sim,Sim,Sim,Ilimitado,Sim,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante

Não,Não,Não,Normal,Não,Ausente,Moderado,Não,Sim,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Limitado,Não,Ausente,Moderado,Não,Não,Não,Não,Sim,Não,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Normal,Não,Moderado,Importante,Moderado,Não,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite Reumatica

Não,Não,Não,Limitado,Não,Muito Importante,Muito Importante,Importante,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Limitado,Não,Moderado,Muito Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumática

Sim,Não,Sim,Normal,Sim,Moderado,Importante,Importante,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Sim,Sim,Limitado,Sim,Moderado,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Limitado,Não,Muito Importante,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Limitado,Não,Importante,Ausente,Leve,Sim,Sim,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumatica

Sim,Não,Não,Normal,Não,Leve,Muito Importante,Não,Não,Não,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante

Não,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumática

Sim,Não,Não,Normal,Não,Moderado,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Limitado,Não,Importante,Ausente,Moderado,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Sim,Artrite Reumatica

Sim,Sim,Não,Normal,Sim,Ausente,Moderado,Leve,Não,Sim,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Sim,Não,Sim,Normal,Não,Ausente,Importante,Não,Não,Não,Não,não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Normal,Não,Importante,Ausente,Não,Não,Não,Sim,Não,Não,Sim,Sim,Não,Não,Artrite Reumatica

Sim,Sim,Não,Normal,Não,Leve,Importante,Importante,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Limitado,Não,Moderado,Moderado,Moderado,Sim,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Limitado,Não,Importante,Importante,Moderado,Sim,Não,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Normal,Não,Importante,Importante,Não,Sim,Sim,Sim,Sim,Não,Sim,Não,Não,Não,Artrite de Gota

Sim,Sim,Não,Normal,Sim,Ausente,Importante,Importante,Não,Sim,Não,Não,Não,Sim,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Normal,Não,Importante,Moderado,Não,Sim,Não,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Limitado,Não,Moderado,Ausente,Não,Não,Não,Sim,Sim,Não,Não,Não,Não,Não,Artrite de Gota

Não,Não,Não,Normal,Não,Importante,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumatica

Não,Não,Não,Limitado,Não,Importante,Moderado,Moderado,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Sim,Não,Não,Normal,Não,Moderado,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Limitado,Não,Ausente,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumática

Sim,Sim,Não,Limitado,Sim,Leve,Importante,Não,Não,Sim,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante

Não,Não,Não,Limitado,Não,Importante,Moderado,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Sim,Sim,Não,Limitado,Não,Importante,Moderado,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Sim,Não,Não,Normal,Não,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Limitado,Não,Moderado,Moderado,Não,Sim,Sim,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota

Sim,Sim,Não,Limitado,Sim,Importante,Muito Importante,Importante,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Não,Não,Não,Limitado,Não,Muito Importante,Ausente,Moderado,Sim,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Artrite Reumática

Não,Não,Não,Limitado,Não,Leve,Moderado,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Não,Não,Não,Limitado,Não,Moderado,Não,Sim,Não,Não,Sim,Não,Sim,Não,Não,Não,Artrite de Gota

Sim,Sim,Sim,Limitado,Não,Moderado,Muito Importante,Moderado,Sim,Não,Não,Não,Não,Sim,Não,Positivo,Sim,Espondilite Anquilosante

Não,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota

Sim,Não,Não,Normal,Não,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Sim,Não,Positivo,Não,Espondilite Anquilosante

Sim,Sim,Não,Normal,Não,Ausente,Ausente,Não,Não,Sim,não,Não,Não,Sim,não,Não,Não,Artrite Reumatica

Sim,Sim,Sim,Normal,Não,Ausente,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Sim,Não,Não,Normal,Sim,Moderado,Importante,Não,Não,Sim,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante

Não,Não,Não,Limitado,Não,Leve,Importante,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Não,Não,Não,Limitado,Não,Leve,Moderado,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Não,Não,Não,Limitado,Não,Moderado,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica

Não,Não,Não,Normal,Não,Importante,Importante,Não,Não,Sim,Não,Não,Não,Sim,Não,Não,Não,Artrite Reumatica

Sim,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite de Gota

Não,Não,Não,Normal,não,Moderado,Importante,Não,Não,Sim,Não,não,Não,Sim,Não,Não,Não,Artrite Reumatica

执行代码时出现的错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1

错误所在行:

rctxt[cont] = aux[1];

有人知道如何解决这个问题吗? (对不起葡萄牙语的一些词,我来自巴西)

【问题讨论】:

  • 请发布堆栈跟踪的其余部分并告诉我们是哪一行导致了异常。
  • 您应该考虑创建一个类来保存您的数据。那么你将只需要这些对象的一个​​数组。
  • 我正在使用 JFRAME,我将更新显示错误行的帖子。
  • JFrame 与您当前的问题无关。

标签: java string file vector


【解决方案1】:

看起来有些行没有任何文本(空行)。

这些行上的拆分不会产生一个 18 长度的字符串数组。

试试

if (arr.length < 18)
   continue;

同样如上所述,拥有一个封装此数据的对象将使您的代码更具可读性。

编辑

澄清

你有这个代码

 while (linha != null) {
        linha = lerArq.readLine(); 
        aux = linha.split(",");

现在检查 aux 数组的大小,如果不是 18 则跳过这一行

    if (aux.length < 18) {
       System.err.println (linha + " does not have enough values");
       continue;
    }

【讨论】:

  • 好的,我删除了文件中的所有空行,现在最后一行出现同样的错误diagnosticotxt[cont] = aux[17],我没有使用你说的条件,因为我不明白.能再解释一下吗?
【解决方案2】:

发生异常是因为您用 空行 分隔了行,而您 不要检查是否实际上有 18 个令牌。 要么删除那些空行,要么添加如下条件:

linha = lerArq.readLine();

aux = linha.split(",");
if(aux.length != 18)
    continue;

您的其中一条线 (35) 也有一点问题。该行只有 17 个标记,如果您不使用条件但删除 File.txt 中的空行,则会导致下一个 ArrayOutOfBoundsException

【讨论】:

  • 嗯,是的,对不起,我的错。要解决这个问题。这里还是一大早-.-'
  • 好的,我删除了文件中的所有空行,现在最后一行出现同样的错误 diagnosticotxt[cont] = aux[17] ,我没有使用你说的条件,因为我不明白。能再解释一下吗?
  • @Mutante 条件检查您从 split 方法收到的令牌数组的长度是否不超过 18。如果是这种情况,继续让程序“跳”回循环开始并遍历下一行。我的回答中也描述了您现在遇到的异常。您文件中的一个条目通常只有 17 个令牌。因此尝试访问第 18 个元素 ([17]) 会导致异常
  • 你能用这个答案更新我的帖子吗?我看不出我把你提到的条件放在哪里以避免最后一个例外。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
相关资源
最近更新 更多