我有一个包含大约 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);
}
或者有更好的方法吗?我读过一些关于模式和正则表达式的帖子,但也不确定如何使用它们。
谢谢!
最佳答案
n
没有保护超过200
.如果 while
的迭代次数超过 200 次然后循环:
itemArr[n] = item;
会抛出 ArrayIndexOutOfBoundsException
.
如果int
每行的开头都是唯一的,您可以使用 Map<Integer, String>
来存储数据。这不会限制 200
关于可以从文件中读取的项目数,如果您选择了 TreeMap
作为实现,它将对它们进行排序(您可以接受 Integer
的自然顺序或定义您自己的 Comparator
)。根据 sethu 的建议你可以使用 BufferedReader
读取文件。
例如:
BufferedReader br = new BufferedReader(new FileReader("inventory.txt"));
Map<Integer, String> items = new TreeMap<Integer, String>();
String line;
while (null != (line = br.readLine()))
{
String[] line_parts = line.split(" ");
if (line_parts.length > 1)
{
StringBuilder desc = new StringBuilder(line_parts[1]);
for (int i = 2; i < line_parts.length; i++)
{
desc.append(line_parts[i]);
}
items.put(new Integer(line_parts[0]), desc.toString());
}
}
for (Integer key: items.keySet())
{
System.out.println(key + " = " + items.get(key));
}
关于java - 如何读取由空格分隔的 int 和字符串混合的文本文件并将每个文件存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772657/