java - 如何读取由空格分隔的 int 和字符串混合的文本文件并将每个文件存储到数组中

标签 java regex arrays input java.util.scanner

我有一个包含大约 200 个项目编号和描述的文本文件,格式如下(没有项目符号):

  • 1642纯羊毛T恤
  • 613 红色系带鞋
  • 3477 带羽毛的蓝色帽子
  • ...

我正在尝试读取项目编号和描述并将其存储到以空格分隔的相应数组中。我的问题是:

  1. 我想忽略描述中的空格。
  2. 当我排序或删除项目时,我想确保描述也被删除。

这是我到目前为止尝试过的方法,但出现 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/

相关文章:

java - 替换两个引号

javascript - 正则表达式排除单词

java - 质数计算公式直到 100000 才显示质数它显示到 9973

java - ExecutorService线程很慢

javascript - 使用正则表达式将 ":"转换为 ": "而不去除换行符

java - 如何使用整数数组进行间距计数来形成垂直字符串图案?

c++ - 允许快速重用任意元素的固定长度数组数据结构? C++

java - 静态最终成员变量与 get 方法

Java编译器使用旧版本的源代码

java - 使用 Java ProcessBuilder 未终止 Linux 僵尸进程