【发布时间】:2012-04-04 02:02:39
【问题描述】:
我有一个包含大约 200 个项目编号和描述的文本文件,格式如下(不带项目符号):
- 1642纯羊毛T恤
- 613 红色系带鞋
- 3477 带羽毛的蓝色帽子
- ...
我正在尝试读取项目编号和描述并将其存储到由空格分隔的各个数组中。我的问题是:
- 我想忽略说明中的空格。
- 当我对项目进行排序或删除时,我想确保描述也被删除。
这是我迄今为止尝试过的,但收到 ArrayIndexOutOfBoundsException 错误,我什至不确定它是否会正确读取描述:
private Scanner file;
private int item = 0;
private String desc = "";
private int[] itemArr = new int[200];
private String[] descArr = new String[200];
int n = 0;
public void openFile(){
try{
file = new Scanner(new File("inventory.txt"));
}
catch(Exception e){
System.out.println("file not found");
}
}
public void readFile(){
while(file.hasNextLine()){
if (file.hasNextInt()){
item = file.nextInt();
}
while(!file.hasNextInt() && !file.hasNextLine()){
desc = desc + file.next() + " ";
}
itemArr[n] = item;
descArr[n] = desc;
n++;
}
for (int i = 0; i < n; i++){
System.out.println(itemArr[i] + " " + descArr[n] + "\n");
}
System.out.println("Total Records (n): " + n);
}
或者有更好的方法吗?我读过一些关于模式和正则表达式的帖子,但也不知道如何使用它。
谢谢!
【问题讨论】:
-
如果您觉得使用数据库不适合您要解决的问题,我的建议是将您的输入文件格式重构为更具代表性的格式,例如JSON 或XML。固定数组索引适用于小型测试用例,但它不够健壮,无法优雅地处理输入数据结构中的更改。作为奖励,JSON 将为您处理类型识别和deserialization。
-
“大约 200 项”?如果您不确定长度,我建议您使用列表。此外,我建议创建一个 Item 对象来存储数据,使 List 存储
- 。正则表达式是提取单个部分的方法,但我不太擅长,所以我不能给你一个模式
-
“1234 Official 39ers Jersey”之类的物品需要处理吗?
-
@Thomas:不,只有描述中的字符 MrGomez:谢谢,但听起来超出了我微不足道的脑容量 x(ggrigery:我会查看列表,谢谢
-
@hugTears 我一直在尝试解决正则表达式模式,但无济于事。我认为它有点类似于
(\d+\D+)。如果您将regex标签添加到您的问题中,正则表达式专家可能会经过并帮助您。祝你好运:)
标签: java regex arrays input java.util.scanner