【问题标题】:How can I sort lines in file starting at nth character?如何从第 n 个字符开始对文件中的行进行排序?
【发布时间】:2019-04-03 20:36:08
【问题描述】:

我有一个文件如下: 1 个菠萝 \n 2个苹果\n

我想从每行的第 n 个字符开始对其进行排序,其中 n 将被给出。

例如如果 n=2,则文件应排序为 2 apple \n 1 pineapple \n 因为 'a' 在 'p' 之前

如果 n = 4,则排序后的文件应该是 1 pineapple \n 2 apple \n 因为 'i' 在 'p' 之前

我怎样才能做到这一点?

在第一个(第 0 个)字符处排序效果很好。我正在关注这个链接:https://javaconceptoftheday.com/how-to-sort-a-text-file-in-java/

实现代码如下:

String inputFile = 'test.txt';
String outputFile = 'output.txt';

FileReader fileReader = new FileReader(inputFile);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String inputLine;
List<String> lineList = new ArrayList<String>();
while ((inputLine = bufferedReader.readLine()) != null) {
    lineList.add(inputLine);
}
fileReader.close();

Collections.sort(lineList);

FileWriter fileWriter = new FileWriter(outputFile);
PrintWriter out = new PrintWriter(fileWriter);
for (String outputLine : lineList) {
    out.println(outputLine);
}
out.flush();
out.close();
fileWriter.close();

上面的代码可以正常工作,但是没有实现从每行第n个字符开始的排序。

【问题讨论】:

    标签: java sorting collections


    【解决方案1】:

    您可以使用自定义比较器,该比较器采用每行的子字符串:

    Files.lines(Paths.get(inputFile))
         .sorted(Comparator.comparing(s -> s.substring(n))
         .forEach(System.out::println);
    

    【讨论】:

      【解决方案2】:

      您可以使用Files 类并对流中的行进行排序。最后,您可以再次使用Files 类保存结果:

      try (Stream<String> lines = Files.lines(Paths.get("test.txt"))) {
          List<String> sortedLines = lines
                  .sorted(Comparator.comparing(line -> line.substring(n)))
                  .collect(Collectors.toList());
          Files.write(Paths.get("output.txt"), sortedLines);
      } catch (IOException e) {
          e.printStackTrace();
      }
      

      如果您只想按单个字符排序,也可以使用 line.charAt(n) 而不是 line.substring(n)

      【讨论】:

        【解决方案3】:

        创建一个比较器并使用 substring 创建一个从第 n 个位置开始的子字符串,然后根据它进行比较。

        https://www.geeksforgeeks.org/comparator-interface-java/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-09
          • 2010-10-19
          • 2011-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-05
          • 1970-01-01
          相关资源
          最近更新 更多