Hallo,
ich habe schon lange nach einer Lösung für mein Problem gesucht, habe jedoch noch keine gefunden und deswegen wende ich mich jetzt hierher:
Ich möchte ein 2D String Array sortieren. Die Werte sehen wie folgt aus:
String[0][0]= test23;
String[0][1]=Beschreibung;
String [1][0]=test12;
String[1][1]=Beschreibung2;
Die Beschriftung "test" ist fest. Er soll im Prinzip nach der Zahl hinter dem"test" sortieren.
Ich habe schon ein Teil des Programms geschrieben, um bei String[x][0] die Zahl hinter "test auszulesen und mit bubblesort zu sortieren:
[Java]
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test3{
public static void main(String args[]){
String str[][]=new String[][]{};
str[0][0]= "test23";
str[0][1]="Beschreibung";
str[1][0]="test12";
str[1][1]="Beschreibung2";
boolean check = false;
while (!check) {
check = true;
String a[]=new String[]{};
String b[]=new String[]{};
for (int i = 0; i < str.length - 1; i++) {
for (int x = 0;x < 2;x++ ){
a[x]=str[x];
b[x]=str[i+1][x];
}
String p = str[0];
String p2 = str[i+1][0];
Pattern pattern=Pattern.compile("\\d\\d*");
Matcher matcher=pattern.matcher(p);
Matcher matcher2=pattern.matcher(p2);
int t = Integer.parseInt (matcher.group());
int t2 = Integer.parseInt (matcher2.group());
ja das mit den 2 dim Array lassen... ich weiß nicht warum das immer gemacht wird....
eine Liste mit Objekten erstellen und sauber mit Collection.sort sortieren...
So auf die Schnelle würde ich sagen, dass ich kein mehrdimensionales Array nehmen würde, sondern ein Array aus einer Daten-Klasse, die die Angaben samt SChlüssel (1ste Spalte) aufnimmt und dann kannst du ganz einfach Comperator verwenden und dann brauchst auch kein Sortierungsrad neu erfinden.
Man da war doch einer schneller. Ich muss schneller tippen ;(
OK, mit dem Comparator habe ich auch schon experimentiert, aber irgendwie bin ich damit nicht zurecht gekommen. Könnte mir evtl. jemand einen Anfang posten?
OK, mit dem Comparator habe ich auch schon experimentiert, aber irgendwie bin ich damit nicht zurecht gekommen. Könnte mir evtl. jemand einen Anfang posten?
OK, mit dem Comparator habe ich auch schon experimentiert, aber irgendwie bin ich damit nicht zurecht gekommen. Könnte mir evtl. jemand einen Anfang posten?
Du musst nicht zwangsweise mit Comparator rumwuseln. Wenn du die Datenklasse erstellst, kannst du auch die equals-Methode überschreiben *ein hoch auf die Vererbung*
Java:
@Overridepublicbooleanequals(Object o){if(this== o){returntrue;}if((o ==null)||(o.getClass()!=this.getClass())){returnfalse;}<Klasse><name>=(<Klasse>) o;// Hier kommt dann das Vergleichen hin zBsp.:// key.equals(o.key) oder ähnlichesreturnfalse;}
nicht sehr defensiv...
und das mit dem regex hab ich ausgebaut.. müsste ich mir mal wieder ansehen...
Java:
importjava.util.ArrayList;importjava.util.Collections;publicclassProjektimplementsComparable<Projekt>{privateint id;privateString name;privateString description;publicProjekt(String name,String description){this.name = name;this.description = description;String lastTwo = name.substring(name.length()-2, name.length());//wie immer du das auch machst.., bei mir hat "\\d\\d*" nicht funktioniert
id =Integer.parseInt(lastTwo);}publicintgetId(){return id;}publicvoidsetId(int id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetDescription(){return description;}publicvoidsetDescription(String description){this.description = description;}publicstaticvoidmain(String[] args){ArrayList<Projekt> list =newArrayList<Projekt>();
list.add(newProjekt("test23","Beschreibung"));
list.add(newProjekt("test12","Beschreibung2"));Collections.sort(list);for(Projekt project : list){System.out.println(project);}}@OverridepublicintcompareTo(Projekt o){if(o.getId()>getId()){return-1;}elseif(o.getId()<getId()){return1;}return0;}@OverridepublicStringtoString(){return"id:"+id+" name:"+name+" beschreibung:"+description;}}