Datentypen Date-Array sortieren - Text mitnehmen?

FRI3ND

Mitglied
Hallo,
ich schreibe momentan ein Programm, bei dem es essenziel ist, eine Liste mit verschiedenen Zeitpunkten zu sortieren. Allerdings besteht der zu sortierende Text nicht nur aus einem Datum; es ist auch ein kleiner Text dabei. Bisher habe ich es nur geschafft, das Datum ohne den Text zu sortieren, doch das bringt mir leider wenig und ich schaffe es nciht, den Text mitzunehmen.
Daher bitte ich nun euch um Hilfe; hier ist ein kleines Test-Programm, mit dem ich es versucht habe:

Java:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

public class Test {

    public static void main(String[] args) {
        String[] test =
            {
                "01.01.2002,17:53,Ich", "01.01.2001,16:38,bin",
                "02.01.2001,13:42,ein", "01.01.2001,16:39,sehr",
                "01.01.2003,15:35,kreativer", "01.01.1999,13:45,Text"
            };

        test = sortiere(test);
        System.err.println("Sortiert:");
        for (String s : test) {
            System.err.println(s);
        }
    }

    public static String[] sortiere(String[] liste) {
        ArrayList<String> list = new ArrayList();
        list.addAll(Arrays.asList(liste));
        ArrayList<Date> date = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy,HH:mm");
        Date dt;
        String[] splitted;
        String[] datum;
        String[] uhrzeit;
        for (String s : list) {
            try {
                splitted = s.split(",");
                s = splitted[0] + "," + splitted[1] /* + "," + splitted[2] */;
                dt = sdf.parse(s);
                date.add(dt);
            } catch (ParseException ignore) {
            }
        }
        date.sort((d1, d2) -> d1.compareTo(d2));
        list.clear();
        for (Date d : date) {
            list.add(sdf.format(d));
        }
        for (int i = 0; i < liste.length; i++) {
            liste[i] = list.get(i);
        }
        return liste;
    }
}
 

Flown

Administrator
Mitarbeiter
Mal eine Anregung:
Java:
/**
 * This class represents a log entry in format: dd.MM.yyyy,HH:mm,{@literal text*}.
 */
public class LogEntry implements Comparable<LogEntry> {
  private static Pattern LOG_ENTRY = Pattern.compile("^(?<datetime>.*?,.*?),(?<text>.*)$");
  private static DateTimeFormatter LOG_DATE_TIME = DateTimeFormatter.ofPattern("dd.MM.yyyy,HH:mm");
 
  private final LocalDateTime datetime;
  private final String text;
 
  private LogEntry(LocalDateTime datetime, String text) {
    this.datetime = datetime;
    this.text = text;
  }
 
  /**
   * Tries to parse the given string to a {@link LogEntry}
   *
   * @param s input string
   * @return {@code null}, if input is {@code null} or does not conform to {@link LogEntry}'s pattern,
   * else a {@link LogEntry}
   */
  public static LogEntry parse(String s) {
    if (s == null) {
      return null;
    }
    Matcher matcher = LOG_ENTRY.matcher(s);
    if (!matcher.matches()) {
      return null;
    }
    LocalDateTime datetime = LOG_DATE_TIME.parse(matcher.group("datetime"), LocalDateTime::from);
    String text = matcher.group("text");
   
    return new LogEntry(datetime, text);
  }
 
  /**
   * Sorting order is:
   * <ol>
   *   <li>datetime</li>
   *   <li>text</li>
   * </ol>
   * <p>
   * {@inheritDoc}
   */
  @Override
  public int compareTo(LogEntry o) {
    int cmp = datetime.compareTo(o.datetime);
    if (cmp == 0) {
      return text.compareTo(o.text);
    }
    return cmp;
  }
 
  /**
   *
   * @return {@link LogEntry}'s string representation
   */
  @Override
  public String toString() {
    return LOG_DATE_TIME.format(datetime) + "," + text;
  }
}

Dann kann man das laufen lassen mit:
Java:
String[] test = {"01.01.2002,17:53,Ich", "01.01.2001,16:38,bin", "02.01.2001,13:42,ein", "01.01.2001,16:39,sehr",
    "01.01.2003,15:35,kreativer", "01.01.1999,13:45,Text", "01.01.1999,13:45,Aext"};
List<String> sortedLogs = Arrays.stream(test).map(LogEntry::parse).sorted().map(Objects::toString).collect(Collectors.toList());
System.out.println(sortedLogs);
 
Zuletzt bearbeitet:

MoxxiManagarm

Top Contributor
Ich stimme grundsätzlich mit der Sinnvollen Datenstruktur überein. Ich würde daher die Vorgänger Vorschläge dringend empfehlen. Aber es würde auch so gehen:
Java:
package javaforum.org.friend;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;


public class ArraySorter {
    public static void main(String[] args) {
        String[] test =
            {
                "01.01.2002,17:53,Ich", "01.01.2001,16:38,bin",
                "02.01.2001,13:42,ein", "01.01.2001,16:39,sehr",
                "01.01.2003,15:35,kreativer", "01.01.1999,13:45,Text"
            };
      
        System.out.println(Arrays.toString(test));

        Arrays.sort(test, (s1, s2) -> {
                String sub1 = s1.substring(0,16);
                String sub2 = s2.substring(0,16);
              
                SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy,HH:mm");
              
                try {
                    return sdf.parse(sub1).compareTo(sdf.parse(sub2));
                } catch (ParseException ex) {
                    return 0;
                }
            }
        );
      
        System.out.println(Arrays.toString(test));
    }
}


Blöd ist hier speziell, dass man in der Compare-Methode eigentlich nicht parsen sollte. Das Exception-Handling ist hier unpassend. außerdem wird hier potenziell mehrmals das gleich
 

mihe7

Top Contributor
Das geht noch hässlicher:
Java:
    public static String[] sortiere(String[] liste) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy,HH:mm");
        Object[][] records = new Object[liste.length][];
        int i = 0;
        for (String s : liste) {
            try {
                String[] splitted = s.split(",");
                records[i] = new Object[2];
                records[i][0] = sdf.parse(splitted[0] + "," + splitted[1]);
                records[i][1] = s;
                i++;
            } catch (ParseException ignore) {
            }
        }
        Arrays.sort(records, (r1, r2) -> ((Date) r1[0]).compareTo((Date)r2[0]));
        for (i = 0; i < liste.length; i++) {
            liste[i] = (String) records[i][1];
        }
        return liste;
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
missy72 Methoden Calendar/Date Countdown Allgemeine Java-Themen 9
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
M JDBC DATE 0000-00-00 kann nicht ausgegeben werden Allgemeine Java-Themen 3
L Erste Schritte Java Date Format Pattern bestimmten Allgemeine Java-Themen 2
Blender3D AWT Fehlerhafte Zeit bei Calender und Date DateFormat Allgemeine Java-Themen 8
P Date und Time in Java Allgemeine Java-Themen 7
B Swing Date Spinner Allgemeine Java-Themen 2
Grejak Date und SimpleDateFormat Allgemeine Java-Themen 6
D Timestamp to Date, ergibt falsches ergebnis Allgemeine Java-Themen 5
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
N SimpleDateFormat: Unparseable date Allgemeine Java-Themen 5
Madlip Erste Schritte Probleme mit Date() Allgemeine Java-Themen 6
T String in Date parsen (*ohne* bekanntes Format) Allgemeine Java-Themen 8
N java.util.Date - Zeit auf 00:00 setzen Allgemeine Java-Themen 3
GianaSisters Klassen Unterschiedliche Zeiten bei DATE Allgemeine Java-Themen 6
Z new Date() liefert falsche Uhrzeit Allgemeine Java-Themen 12
G Calendar/Date arithmetic Allgemeine Java-Themen 3
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Unix-Timestamp > Date macht Probleme. Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
E Seltsamer aufruf von java.util.Date.toString() Allgemeine Java-Themen 3
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
Joy String in Date umwandeln Allgemeine Java-Themen 2
K String zu Date kovertieren Allgemeine Java-Themen 3
S Zeitserver Abfragen und in Date speichern Allgemeine Java-Themen 5
0 Datum in Java Date umwandeln Allgemeine Java-Themen 4
C Datum erstellen für SQL Format Date Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
B Date Addition Allgemeine Java-Themen 2
H2SO3- Date "18.11.2002 20:02:33" trotz Locale.GERMAN nic Allgemeine Java-Themen 9
H2SO3- Exception beim date parsen des Jahres 00 Allgemeine Java-Themen 6
H2SO3- merken versch. Date Typen + erlaubte und unerlaubte kombinat Allgemeine Java-Themen 4
H2SO3- date mit pm and am parsen Allgemeine Java-Themen 3
G double in Date Allgemeine Java-Themen 5
S Date Objekt von voller Stunde Allgemeine Java-Themen 3
M Date objekt als 00.00.0000 ausgeben Allgemeine Java-Themen 2
MQue Date, Timestamp, Millisecond Allgemeine Java-Themen 3
alexpetri Date Parsen Allgemeine Java-Themen 3
F Problem mit TimeStamp to Date Allgemeine Java-Themen 8
M Date Range auswerten und die Monate berechnen Allgemeine Java-Themen 2
DEvent min. Jahr von Date Allgemeine Java-Themen 2
H Wer kennt sich mit der Klasse Date aus? Allgemeine Java-Themen 3
G Date wird nicht richtig geparsed Allgemeine Java-Themen 3
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
P von Date zu Timestamp Allgemeine Java-Themen 10
H Date in String wandeln un dumgekehrt. Allgemeine Java-Themen 17
P SimpleDateFormat/Date Allgemeine Java-Themen 4
N Date & RMI Problem Allgemeine Java-Themen 3
V Date und Calendar . Allgemeine Java-Themen 3
P sql.Date -> the constructor Date() is undefined! Allgemeine Java-Themen 3
M String nach Date Allgemeine Java-Themen 4
E XML dateTime String in Date mit SimpleDateFormat umwandeln Allgemeine Java-Themen 5
K Date formatieren Allgemeine Java-Themen 7
L String ==> Date ==> GregorianCalendar Allgemeine Java-Themen 3
G Date-Objekt aus Datums-String erstellen Allgemeine Java-Themen 6
F Spezialfrage zu Date Allgemeine Java-Themen 5
L-ectron-X Zeitspanne mit Date und DateFormat Allgemeine Java-Themen 7
B String to Date Allgemeine Java-Themen 7
K Date: getTime immer gleich Allgemeine Java-Themen 4
B Java.Date -> Delphi.TDateTime Allgemeine Java-Themen 4
D Datum und Zeit - Date, Calendar oder GregorianCalender ? Allgemeine Java-Themen 13
P Alter in Jahren aus Date-Objekt ermitteln Allgemeine Java-Themen 5
T Datum als String in Date umwandeln Allgemeine Java-Themen 3
R Date Tage abziehen Allgemeine Java-Themen 3
I java.util.Date - die 1970-Untergrenze Allgemeine Java-Themen 3
T Probleme mit Date und Calendar Allgemeine Java-Themen 7
W Mit Date-Objekten arbeiten Allgemeine Java-Themen 10
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
V4ll3.Wff Array in Java Allgemeine Java-Themen 4
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
H Array Sportschütze Allgemeine Java-Themen 6
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
M Array verändern Allgemeine Java-Themen 1
A JavaFX 2 dimensionales array Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17

Ähnliche Java Themen

Neue Themen


Oben