建設 发表于 2021-4-2 11:32:23

java下标越界如何解决

package bianma;

import java.io.*;
import java.util.HashMap;


public class P2 {
    public static void main(String[] args) throws IOException {
      HashMap<String,String> map = new HashMap<>();
      BufferedReader br = new BufferedReader(new FileReader("paixu.txt"));
      BufferedWriter bw = new BufferedWriter(new FileWriter("paixu2.txt"));
      String line;
      while((line = br.readLine())!=null){         
//         String[] arr =new String;
            arr = line.split("\\.");
//            System.out.println(arr);
//            System.out.println(arr);            
            map.put(arr,arr);
//            System.out.println(map);
      }

      for(String key : map.keySet()){
            String value = map.get(key);
            System.out.println(value);         
            line = key + "." + value;            
            bw.write(line);
            bw.newLine();//写换行
      }      
      bw.close();
      br.close();
    }
}报错Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
报错行一直显示是“map.put(arr,arr)”这一行
如果在此行之前加上“System.out.println(arr);”,报错的就是这行
把“map.put(arr,arr)”注释掉程序正常运行(没有结果)
请问这是什么问题呀

老焦 发表于 2021-4-4 06:21:21

只有一个数据 只有下标0的那个下标1就越界了

绿烟指蓝 发表于 2021-4-15 10:32:25

System.out.prntln(arr);
arr = line.split("\\.");

前面打印一下你的数据,应该是某一行没有小数点分割的。

小字贝 发表于 2021-4-29 05:47:26

楼主,你是要求用户输入时,按你的规范来,要求输入两个数据,数据之间用一个分隔符,但是用户使用时,偏不按你的要求来,所以你 split 得不到到你想要的
这时,你要做的是,判断用户输入格式是否符合要求,如果不符合,就直接报错,不要走到下面的处理逻辑去。

贤小鱼 发表于 2021-5-4 10:17:00

arr = line.split("\\.");
map.put(arr,arr);

这两行,你想下,第一行是将读到的一行内容按点号拆分,第二行是使用拆分的两个数据。

那么,如果文件有空行呢,或者这行内容没有点号呢,如果遇到这样的内容,当然下标越界,因为没有 arr

建议在map.put前面增加检查,如果arr的size是2才读取,其他情况跳过,或者针对性的处理下应该就可以了

呦吼 发表于 2021-5-15 07:15:15

因为你运行的时候没有给它穿参数。args的长度是0,所以会出现下标越界

洛亦幻 发表于 2021-5-24 19:10:42

简单来说,至少有一行是没有\\.的,所以出现异常,try一下吧
页: [1]
查看完整版本: java下标越界如何解决