Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中对TXT文件进行排序_Java_Sorting_Text - Fatal编程技术网

在Java中对TXT文件进行排序

在Java中对TXT文件进行排序,java,sorting,text,Java,Sorting,Text,我有一个方法,我用来提取信息从一个网站,目前有它的TXT文件。我希望对信息进行分类,类似于我执行打印语句以显示结果时在输出中的显示方式,如下所示: QB 3 Anderson, Derek ACT TDS -- INT -- YDS -- RTG 0.0 CAR QB 2 Barkley, Matt ACT TDS 0 INT 4 YDS 300 RTG 44.6 PHI QB 5 Bethel-Thompson, McLeod ACT TDS 0 INT 0 YDS 0 RTG 0.0

我有一个方法,我用来提取信息从一个网站,目前有它的TXT文件。我希望对信息进行分类,类似于我执行打印语句以显示结果时在输出中的显示方式,如下所示:

 QB 3 Anderson, Derek ACT TDS -- INT -- YDS -- RTG 0.0 CAR
 QB 2 Barkley, Matt ACT TDS 0 INT 4 YDS 300 RTG 44.6 PHI
 QB 5 Bethel-Thompson, McLeod ACT TDS 0 INT 0 YDS 0 RTG 0.0 SF
在我的文本文件中,我将其显示为:

QB3Anderson, DerekACTTDS--INT--YDS--RTG0.0CARQB2Barkley, MattACTTDS0INT4YDS300RTG44.6PHIQB5Bethel-Thompson, McLeodACTTDS0INT0YDS0RTG0.0SF

任何建议(请注意这是用Java编写的)

使用BufferedReader阅读每一行。每一行都是一个字符串。然后将每一行添加到列表中并对列表进行排序

    BufferedReader reader = new BufferedReader(new FileReader("text.txt"));
    String line;
    ArrayList<Entry> list = new ArrayList<Entry>();
    while((line = reader.readLine()) != null) {
        list.add(new Entry(line));
    }
    Collections.sort(list);

    // list is sorted!
BufferedReader=new BufferedReader(new FileReader(“text.txt”);
弦线;
ArrayList=新建ArrayList();
而((line=reader.readLine())!=null){
列表。添加(新条目(行));
}
集合。排序(列表);
//列表已排序!
然后您需要Entry类:

import java.util.StringTokenizer;

public class Entry implements Comparable<Entry> {

    private String qb;
    private String number;
    private String name;

    public Entry(String text) {
        StringTokenizer st = new StringTokenizer("", " ");
        this.qb = st.nextToken();
        this.number = st.nextToken();
        this.name = st.nextToken();
        // ... etc
    }

    @Override
    public int compareTo(Entry other) {
        return this.name.compareTo(other.name);
    }
}
import java.util.StringTokenizer;
公共类条目实现了可比性{
私有字符串qb;
私有字符串编号;
私有字符串名称;
公共条目(字符串文本){
StringTokenizer st=新的StringTokenizer(“,”);
this.qb=st.nextToken();
this.number=st.nextToken();
this.name=st.nextToken();
//…等等
}
@凌驾
公共整数比较(其他条目){
返回此.name.compareTo(其他.name);
}
}

您的类需要实现Comparable,以便Collections.sort()知道如何排序。另外,实现equals()和hashCode()总是一个好主意。

在我看来,你的问题实际上是关于解析和格式化,而不是排序

要格式化这样的文本,您可以使用扫描仪轻松地匹配每个QB,如下所示

String text = "QB3Anderson, DerekACTTDS--INT--YDS--RTG0.0CARQB2Barkley, MattACTTDS0INT4YDS300RTG44.6PHIQB5Bethel-Thompson, McLeodACTTDS0INT0YDS0RTG0.0SF";
Scanner scanner = new Scanner(text);
scanner.useDelimiter("QB");
while(scanner.hasNext()){
    String qb = "QB" + scanner.next();
    System.out.println(qb);
}
将输出:
QB3Anderson,DerekACTTDS--INT--YDS--RTG0.0CAR
QB2Barkley,MattACTTDS0INT4YDS300RTG44.6PHI
QB5Bethel Thompson,McLeodACTTDS0INT0YDS0RTG0.0SF

然后,对于每个qb字符串,您可以使用string.subString()和string.indexOf()对您想要的字段进行简单的模式匹配

String number = qb.substring(2, 3);
String name = qb.substring(3, qb.indexOf("ACT"));
String INT = qb.substring(qb.indexOf("INT") + 3, qb.indexOf("YDS") );

解析完所有字段后,按所需格式和顺序打印它们

如何判断一名四分卫的结束位置和下一名四分卫的开始位置?更深层次的问题似乎是如何从网站中提取信息。你是怎么做到的?我正在使用JSOUP提取它基本上我想在编译它时按照它在输出中的方式进行排序,因为这样可以更容易地将我提取的必要信息添加到我的数据库中。非常确定这将按四分卫的编号对列表进行排序。我认为OP希望按名称对它们进行排序。@Akira我认为他不一定要在导入行后对行进行排序。他只是想检测单词的位置并添加空格。@Wold,我只是相信问题的标题,其中“sort”是第一个单词。:)嗯,不是字面上的意思。