2013-11-13 4 views
0

У меня есть метод, который я использовал для извлечения информации с веб-сайта, и теперь она идет в TXT-файлы. Я ищу, чтобы отсортировать информацию из подобно тому, как он отображается в выходной, когда я делаю заявление для печати, чтобы показать результаты, как показано ниже:Сортировка TXT-файла в Java

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)

+0

Как вы можете сказать, где один Quarterback заканчивается и начинается следующий? – Vidya

+0

Более глубокая проблема заключается в том, как вы извлекаете информацию с веб-сайта. Как вы это делаете? –

+0

Я извлекаю его с помощью JSoup –

ответ

1

Читайте каждую строку, используя 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! 

Тогда вам нужен класс Стажер:

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); 
    } 
} 

Ваш класс должен реализовать Сопоставимые так что Collections.sort() будет знать, как сортировать. Кроме того, реализация equals() и hashCode() всегда является хорошей идеей.

+1

Довольно уверен, что это отсортировало бы список по номеру защитника. Я думаю, что OP хочет сортировать их по имени. – Vidya

+0

@ Акира Я не думаю, что он обязательно пытается сортировать строки, как только они были импортированы. Он просто хочет определить, где слова, и добавить пробелы. – Wold

+1

@Wold, я просто доверял заголовку вопроса, в котором «сортировка» - это первое слово. :) Ну, не буквально. – Akira

0

Мне кажется, что ваша проблема действительно в синтаксическом анализе и форматировании, а не в сортировке?

Для форматирования текста, как это можно использовать сканер легко соответствовать каждому 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-Томпсон, 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")); 

После того, как вы все ваши поля разобран затем распечатать их в формате и порядке вы хотите

Смежные вопросы