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)”注释掉程序正常运行(没有结果)
请问这是什么问题呀
只有一个数据 只有下标0的那个下标1就越界了 System.out.prntln(arr);
arr = line.split("\\.");
前面打印一下你的数据,应该是某一行没有小数点分割的。 楼主,你是要求用户输入时,按你的规范来,要求输入两个数据,数据之间用一个分隔符,但是用户使用时,偏不按你的要求来,所以你 split 得不到到你想要的
这时,你要做的是,判断用户输入格式是否符合要求,如果不符合,就直接报错,不要走到下面的处理逻辑去。 arr = line.split("\\.");
map.put(arr,arr);
这两行,你想下,第一行是将读到的一行内容按点号拆分,第二行是使用拆分的两个数据。
那么,如果文件有空行呢,或者这行内容没有点号呢,如果遇到这样的内容,当然下标越界,因为没有 arr
建议在map.put前面增加检查,如果arr的size是2才读取,其他情况跳过,或者针对性的处理下应该就可以了 因为你运行的时候没有给它穿参数。args的长度是0,所以会出现下标越界 简单来说,至少有一行是没有\\.的,所以出现异常,try一下吧
页:
[1]