java下标越界如何解决

秋叶原の黑猫 2020-09-13 01:25:48
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[3];
arr = line.split("\\.");
// System.out.println(arr[0]);
// System.out.println(arr[1]);
map.put(arr[0],arr[1]);
// 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[0],arr[1])”这一行
如果在此行之前加上“System.out.println(arr[1]);”,报错的就是这行
把“map.put(arr[0],arr[1])”注释掉程序正常运行(没有结果)
请问这是什么问题呀


...全文
10811 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengchuiqi_ 2020-10-12
  • 打赏
  • 举报
回复
引用 17 楼 秦谜 的回复:
因为你运行的时候没有给它穿参数。args的长度是0,所以会出现下标越界。
mian方法是不需要传参数的,不是这个问题
临世驻年 2020-10-10
  • 打赏
  • 举报
回复
因为你运行的时候没有给它穿参数。args的长度是0,所以会出现下标越界。
qq_39936465 2020-09-21
  • 打赏
  • 举报
回复
引用 14 楼 秋叶原の黑猫 的回复:
这程序稍微修改一下就能运行了吧。我的txt是随手创建的,里面的文字也是随手输入的。。。
都说了程序需要对应的数据格式,如果数据格式不符合程序所编写的格式肯定会报错,程序肯定要根据数据格式来修改的,你到现在都没有理清数据与程序的关系,要么数据匹配程序,要么程序匹配数据,不是一句我随手输入就行了,请先搞清楚数据的格式。
秋叶原の黑猫 2020-09-21
  • 打赏
  • 举报
回复
引用 12 楼 qq_39936465的回复:
[quote=引用 11 楼 秋叶原の黑猫 的回复:] 我在觉得有问题的每一行都执行过输出语句,最终才得出的结论。只根据报错来修改,我认为我找不到错误好吧。你是觉得我理解不了所以说我基础差吗,我不理解。别人能运行成功的代码我没运行成功,就当我文件出错好吧。我文件都修改n遍了,各种符号空格数字都改过
别人让你输出内容不是为了输出而输出,是为了比对文本的内容和实际上输出是否有差异,如果有差异就是split的分割符有问题,如果没有差异就是文本内的某行数据和基本格式不符合,造成没有第二个值。 别人没有你的文本数据所以根本无法用你的程序运行。关键还是程序于数据源的格式问题,要么你贴出文本内容让大家帮你分析分析。[/quote] 这程序稍微修改一下就能运行了吧。我的txt是随手创建的,里面的文字也是随手输入的。。。
秋叶原の黑猫 2020-09-21
  • 打赏
  • 举报
回复
其实我想的是这程序,无论是谁,稍微修改一下程序就能运行了吧。我的文本是随手创建的txt文本,所以。。
qq_39936465 2020-09-21
  • 打赏
  • 举报
回复
引用 11 楼 秋叶原の黑猫 的回复:
我在觉得有问题的每一行都执行过输出语句,最终才得出的结论。只根据报错来修改,我认为我找不到错误好吧。你是觉得我理解不了所以说我基础差吗,我不理解。别人能运行成功的代码我没运行成功,就当我文件出错好吧。我文件都修改n遍了,各种符号空格数字都改过
别人让你输出内容不是为了输出而输出,是为了比对文本的内容和实际上输出是否有差异,如果有差异就是split的分割符有问题,如果没有差异就是文本内的某行数据和基本格式不符合,造成没有第二个值。 别人没有你的文本数据所以根本无法用你的程序运行。关键还是程序于数据源的格式问题,要么你贴出文本内容让大家帮你分析分析。
xxoo2007 2020-09-21
  • 打赏
  • 举报
回复
arr = line.split("\\."); map.put(arr[0],arr[1]); 这两行,你想下,第一行是将读到的一行内容按点号拆分,第二行是使用拆分的两个数据。 那么,如果文件有空行呢,或者这行内容没有点号呢,如果遇到这样的内容,当然下标越界,因为没有 arr[1] 建议在map.put前面增加检查,如果arr的size是2才读取,其他情况跳过,或者针对性的处理下应该就可以了
秋叶原の黑猫 2020-09-18
  • 打赏
  • 举报
回复
引用 10 楼 qq_39936465的回复:
[quote=引用 9 楼 秋叶原の黑猫 的回复:][quote=引用 2 楼 老紫竹 的 原程序我在while循环后面打印什么都没用。br的文件我各种修改,甚至改为空文件,也一样报错。 于是我修改为while((line = br.readLine())==null),发现while循环内全都没输出。我认为是while的条件出现了错误,readline没有读到Null
你改为while((line = br.readLine())==null)意思是说只有读取为空才会输出,当然输出也都为空。 原来语句的是意思是从输入文件中读取一行数据,如果不为空(为空就是输入文件已经结束),就执行循环内语句。 while((line = br.readLine())!=null) 也就是说你line其实是读到东西的,不然不会进入循环,但是你的split语句造成arr数组可能只有1个数据arr[0],所以当然执行arr[1]时肯定是数组越界。 你基础太差了,不能理解别人告诉的你东西,好好补补基础吧。[/quote] 我在觉得有问题的每一行都执行过输出语句,最终才得出的结论。只根据报错来修改,我认为我找不到错误好吧。你是觉得我理解不了所以说我基础差吗,我不理解。别人能运行成功的代码我没运行成功,就当我文件出错好吧。我文件都修改n遍了,各种符号空格数字都改过
qq_39936465 2020-09-17
  • 打赏
  • 举报
回复
引用 9 楼 秋叶原の黑猫 的回复:
[quote=引用 2 楼 老紫竹 的 原程序我在while循环后面打印什么都没用。br的文件我各种修改,甚至改为空文件,也一样报错。 于是我修改为while((line = br.readLine())==null),发现while循环内全都没输出。我认为是while的条件出现了错误,readline没有读到Null
你改为while((line = br.readLine())==null)意思是说只有读取为空才会输出,当然输出也都为空。 原来语句的是意思是从输入文件中读取一行数据,如果不为空(为空就是输入文件已经结束),就执行循环内语句。 while((line = br.readLine())!=null) 也就是说你line其实是读到东西的,不然不会进入循环,但是你的split语句造成arr数组可能只有1个数据arr[0],所以当然执行arr[1]时肯定是数组越界。 你基础太差了,不能理解别人告诉的你东西,好好补补基础吧。
秋叶原の黑猫 2020-09-16
  • 打赏
  • 举报
回复
引用 7 楼 qq_39936465 的回复:
[quote=引用 4 楼 秋叶原の黑猫 的回复:][quote=引用 2 楼 老紫竹 的回复:]System.out.prntln(arr); arr = line.split("\\."); 前面打印一下你的数据,应该是某一行没有小数点分割的。
原本代码我是直接new arr = line.split("\\."); 打印arr没有意义[/quote] 查一下 paixu.txt这个文件,确实如2楼所以的可能性很大。数据错误光看程序你一辈子找不到问题。[/quote] 原程序我在while循环后面打印什么都没用。br的文件我各种修改,甚至改为空文件,也一样报错。 于是我修改为while((line = br.readLine())==null),发现while循环内全都没输出。我认为是while的条件出现了错误,readline没有读到Null
夜轻风 2020-09-15
  • 打赏
  • 举报
回复
paixu.txt 这个文件内容没有【.】,split 没达到你想要的效果
qq_39936465 2020-09-14
  • 打赏
  • 举报
回复
引用 4 楼 秋叶原の黑猫 的回复:
[quote=引用 2 楼 老紫竹 的回复:]System.out.prntln(arr); arr = line.split("\\."); 前面打印一下你的数据,应该是某一行没有小数点分割的。
原本代码我是直接new arr = line.split("\\."); 打印arr没有意义[/quote] 查一下 paixu.txt这个文件,确实如2楼所以的可能性很大。数据错误光看程序你一辈子找不到问题。
小灰狼 2020-09-14
  • 打赏
  • 举报
回复
楼主,你是要求用户输入时,按你的规范来,要求输入两个数据,数据之间用一个分隔符,但是用户使用时,偏不按你的要求来,所以你 split 得不到到你想要的 这时,你要做的是,判断用户输入格式是否符合要求,如果不符合,就直接报错,不要走到下面的处理逻辑去。
xiaoxiangqing 2020-09-14
  • 打赏
  • 举报
回复
要判断一个参数的长度
秋叶原の黑猫 2020-09-13
  • 打赏
  • 举报
回复
引用 2 楼 老紫竹 的回复:
System.out.prntln(arr); arr = line.split("\\."); 前面打印一下你的数据,应该是某一行没有小数点分割的。
原本代码我是直接new arr = line.split("\\."); 打印arr没有意义
老紫竹 2020-09-13
  • 打赏
  • 举报
回复
System.out.prntln(arr); arr = line.split("\\."); 前面打印一下你的数据,应该是某一行没有小数点分割的。
tianfang 2020-09-13
  • 打赏
  • 举报
回复
只有一个数据 只有下标0的那个 下标1就越界了

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧