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

tec*_*ele 1 java sorting collections

我有一个文件如下: 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' 之前

我怎样才能实现这个目标?

在第 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();
Run Code Online (Sandbox Code Playgroud)

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

Mur*_*nik 5

您可以使用自定义比较器来获取每行的子字符串:

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