2010-04-12 8 views
2

J'essaie de trier les dates du plus tôt au plus tard. Je pensais utiliser le lecteur buffered et j'essaie de chercher les 2 premiers caractères de la chaîne puis les 4ème et 5ème caractères et enfin les 7ème et 8ème caractères, en ignorant les barres obliques.Tri d'un fichier texte par date - Date ressemble à JJ/MM/AAAA

Voici un exemple du fichier texte que j'ai:

04/24/2010 - 2000,0 (dépôt)

09/05/2010 - 20,0 (Frais)

02/30/2007-600,0 (dépôt)

15/06/2009 - 200,0 (frais)

08/23/2010 - 300,0 (dépôt)

06/05/2006 - 500.0 (Frais)

+0

Bienvenue chez SO, John! Mis à part le fait que vous ne vérifiez que deux chiffres de l'année, votre algorithme semble réussir. Avez-vous une question à ce sujet? – Pops

+0

Merci pour l'accueil. Je commence tout juste à me lancer dans la programmation et j'essaie de comprendre ce qui se passe autour de moi. –

Répondre

0

Quelle est la taille du fichier? Je voudrais juste lire dans chaque ligne, créer un objet date pour chacune des lignes, puis appeler Collections.sort(list<myobjectwithdate>)

La date fournit un comparateur, donc vous pouvez très facilement tout stocker en mémoire, le trier, puis le réécrire fichier.

class LineAndDate implements Comparable{ 
    private Date date; 
    private String line; 

    public int compareTo(Object other) 
    { 
    return date.compareTo(((LineAndDate)other).date; 
    } 

} 

un magasin List<LineAndDate> en mémoire, et alors vous devriez juste être en mesure d'appeler Collections.sort(myList) et écrire que.

0

Modifiez vos dates au format souhaité en utilisant SimpleDateFormat et triez dessus.

2

How do I sort records in a text file using Java?

Cette matraqué avec la modification de vos dates au format souhaité à l'aide SimpleDateFormat en getField(String line) devrait vous aller.

+0

J'ai remarqué que cela ne permettait pas de dupliquer les chaînes quand j'ai essayé de l'exécuter, comme le dit une note dans le lien que vous m'avez donné. Aussi, quand je cours le tri, il le met dans une seule ligne. En ce qui concerne SimpleDateFormat, j'utiliserais le MM/JJ/AAAA que je suppose. Merci pour votre aide! –

+1

Oui, une carte n'autorise pas les clés en double. Donc, vous pourriez vouloir changer la valeur dans la carte à un 'List ' de sorte que le code ressemble à (Code donné juste pour idée-sake; N'a pas compilé/test) ' Liste records; while ((ligne = lecteur.readLigne())! = Null) { if (map.get (getField (ligne)! = Null) { enregistrements = map.get (getField (ligne)); } else { records = new ArrayList ();} records.add (ligne); map.put (getField (ligne), enregistrements);} ' de même, la boucle qui écrit sur les enregistrements traitera' Liste 'valeurs dans la carte. –