如何对文件中从第n个字符开始的行进行排序?

时间:2019-04-03 20:36:09

标签: java sorting collections

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

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

例如,如果n = 2,则文件应排序为2个苹果\ n 1个菠萝\ n,因为'a'在'p'之前

如果n = 4,则排序后的文件应为1个菠萝\ n 2个苹果\ n,因为“ i”在“ p”之前

我该如何实现?

从第1个(第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个字符开始的排序。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

您可以使用Observable.interval(600000).pipe( takeUntil(this.onDestroy$) ).subcribe(//... 类并对Stream中的行进行排序。最后,您可以再次使用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)

答案 2 :(得分:1)

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

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