【问题标题】:Split file into Array将文件拆分为数组
【发布时间】:2015-08-26 02:16:24
【问题描述】:

请帮我解决我正在尝试解决的这个问题,我已经坚持了好几个小时了。

问题:从文本文件中读取数据。数据文件结构:

  • 会有多组数据
  • 数据集以空行分隔
  • 每个数据集都包含一定数量的正整数

任务:我想编写一个 Java 程序来读取用户提供的数据文件并将每个数据集存储在单独的数组中。我还想将每个数组的大小显示为输出,然后按排序顺序(数字的递增顺序)显示相应的数据集。我想使用Arrays.sort(int[ ]) 方法对每个数组进行排序。我已经把文件读下来了。

任何帮助将不胜感激!!!我不认为我正在编写将它们放入数组并正确计算项目数的方法。

下面是我如何处理这个文件的代码。

while(inFile.hasNext()){
       String line = inFile.nextLine();
       String[] lineArray = line.split("\\s+");
       list.add(line);
       Arrays.sort(lineArray);
       System.out.println("Total number of elements in array : " + lineArray.length );
       String a = Arrays.toString(lineArray);
       System.out.println(a.substring(1, a.length() - 1));

【问题讨论】:

  • 提示:在Arrays.sort(lineArray); 中,您正在对字符串进行排序,您可能还需要其他内容...
  • 线数组应该转换成整数数组才能使用Arrays.sort()

标签: java arrays


【解决方案1】:

您可以先将整个文件读入带有Files.readAllLines(Path)List。然后您需要将您的String[] lineArray 转换为int[]Integer.parseInt(String)String 转换为 int。这可能看起来像

public static void main(String[] args) throws IOException {
    String home = System.getProperty("user.home");
    Path filePath = Paths.get(home, "file.txt");
    List<String> lines = Files.readAllLines(filePath);
    for (String line : lines) {
        String[] lineArray = line.split("\\s+");
        System.out.println("Total number of elements in array : "
                + lineArray.length);
        int[] arr = new int[lineArray.length];
        for (int i = 0; i < lineArray.length; i++) {
            arr[i] = Integer.parseInt(lineArray[i]);
        }
        Arrays.sort(arr);
        String a = Arrays.toString(arr);
        System.out.println(a.substring(1, a.length() - 1));
    }
}

【讨论】:

    【解决方案2】:

    Java8中,你可以使用stream来简化你的代码:

    public static void main(String[] args) throws IOException {
        Files.lines(Paths.get("./myinputFile.txt"))
                .map(l -> Arrays.stream(l.split("\\s+")).map(Integer::parseInt))
                .map(Stream::sorted)
                .forEach(t -> {
                    t.forEach(v -> System.out.print(v + " "));
                    System.out.println();
                });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 2018-10-21
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多