基于子字符串以特定顺序输出文件-Java

基于子字符串以特定顺序输出文件-Java,java,Java,我有点小问题。我正在创建一个小实用程序来订购大量数据,但在如何进行这项工作方面遇到了一些困难。我已经得到了要读取、循环和输出的文件。我可以看到子字符串值,但不确定如何根据子字符串值正确获取输出集。基本上,我们希望根据子字符串按降序输出每一行。我的代码如下: import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner; public

我有点小问题。我正在创建一个小实用程序来订购大量数据,但在如何进行这项工作方面遇到了一些困难。我已经得到了要读取、循环和输出的文件。我可以看到子字符串值,但不确定如何根据子字符串值正确获取输出集。基本上,我们希望根据子字符串按降序输出每一行。我的代码如下:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class fedOrganiser {
    public static void main(String[] args) throws FileNotFoundException {
        //File Path
        Scanner fileIn = new Scanner(new File("C:\\Users\\xxx\\Desktop\\Files\\ex1.txt"));
        PrintWriter out = new PrintWriter("C:\\Users\\xxx\\Desktop\\Files\\filename.txt");
        while(fileIn.hasNextLine()==true) {//if no more lines to read, will return false
            //int orderBy = nextLine();
            System.out.println(fileIn.nextLine().substring(12,25));
            out.println(fileIn.nextLine() + "\n");
        }
        System.out.println("Completed");
        out.close();
    }
}
任何想法或方向都很好:)

编辑:我没有循环,而是按照以下步骤将整个文件读入内存:

 String entireFileText = new Scanner(new File("C:\\Users\\xxx\\Desktop\\Files\\ex1.txt"))
                    .useDelimiter("\\A").next();
                  System.out.println(entireFileText);
但我不知道该怎么安排

每行的数据示例:

%[时间戳=1][EVENT=agentStateEvent1]

%[时间戳=8][EVENT=agentStateEvent8]

%[时间戳=6][EVENT=agentStateEvent6]

%[时间戳=5][EVENT=agentStateEvent5]

我想按时间戳的顺序排列上面的数据

输出我想要的。可以是升序或降序

%[时间戳=1][EVENT=agentStateEvent1]

%[时间戳=5][EVENT=agentStateEvent5]

%[时间戳=6][EVENT=agentStateEvent6]


%[TIMESTAMP=8][EVENT=agentstatevent8]

首先,将行存储在已排序的映射中

TreeMap<String,String> lines = new TreeMap<String,String>();
然后按降序将排序后的行写入输出文件:

for (String key : lines.descendingKeySet()) {
    out.println(lines.get(key) + "\n");
}
out.close();

首先,将线存储在已排序的地图中

TreeMap<String,String> lines = new TreeMap<String,String>();
然后按降序将排序后的行写入输出文件:

for (String key : lines.descendingKeySet()) {
    out.println(lines.get(key) + "\n");
}
out.close();

对于提供的示例行,您可以使用
ArrayList
对它们进行排序(正如Ankush Soni在评论中建议的那样)

为此,
在循环之前创建
ArrayList

ArrayList<String> lines = new ArrayList<>();  
在此之后,使用集合对数组列表进行排序。
Collections.sort()

然后用

for(String s : lines){
        out.println(s + "\n");
}

对于提供的示例行,您可以使用
ArrayList
对它们进行排序(正如Ankush Soni在评论中建议的那样)

为此,
在循环之前创建
ArrayList

ArrayList<String> lines = new ArrayList<>();  
在此之后,使用集合对数组列表进行排序。
Collections.sort()

然后用

for(String s : lines){
        out.println(s + "\n");
}


在我看来,这就好像您将在读入时简单地输出每一行。如果你真的想改变顺序,我相信您可能需要将整个文件读入内存,然后对其进行排序。您可以将每一行存储在一个集合中,例如ArrayList,一旦读取完成,请使用Collections.sort方法对ArrayList进行排序。sort方法可以对您的行集合进行排序。您能否给出一个文件中的行示例,以便我们更好地理解“您在这里做什么以及如何对其进行排序?”isuru buddhika example Provided在我看来,这就像您将在阅读时简单地输出每一行一样。如果你真的想改变顺序,我相信您可能需要将整个文件读入内存,然后对其进行排序。您可以将每一行存储在一个集合中,例如ArrayList,一旦读取完成,请使用Collections.sort方法对ArrayList进行排序。sort方法可以对您的行集合进行排序。您能否给出一个文件中的行示例,以便我们更好地理解您在这里做什么以及如何对其进行排序?@isuru buddhika example providedHi jovit,我在下面的一行中得到一个错误:for(String key in line.degendingKeyset()){这一行有多个标记-对于类型SortedMap,方法degendingKeyset()未定义-标记“in”的语法错误,:expectedSee我编辑的答案:
TreeMap line=newtreemap()
这不太有效。如果我给出1,2,3,12,14的样本数据,它的输出将显示为3,2,1,14,12抱歉刚刚意识到为什么,这是由于子字符串。我的最后一个问题是,在循环过程中,如果有两行具有相同字符串,它将只输出其中一行,有什么方法可以这样做吗?嗨,jovit,我的fo出现了一个错误以下行:for(String key in line.downingkeyset()){此行有多个标记-类型SortedMap的方法downingkeyset()未定义-标记“in”上的语法错误:预期请参见我编辑的答案:
TreeMap line=new TreeMap()
这不太有效。如果我给出1,2,3,12,14的样本数据,它的输出将显示为3,2,1,14,12抱歉刚刚意识到为什么,这是由于子字符串。我的最后一个问题,在循环时,如果有两行具有相同的字符串,它将只输出其中一行,有什么方法可以这样做吗?