Strings vergleichen

  • Themenstarter Themenstarter LuckySlevin
  • Beginndatum Beginndatum
L

LuckySlevin

Gast
Hey ,

Ich muss Strings miteinander vergleichen und dann das passende Gegenstück dazu ausgeben aber irgendwie funktioniert es noch nicht ganz ...

Java:
	public static String getOwner(String licensePlateList){
		
		int k=0;
		
	k=JOptionPane.showConfirmDialog(null,"Wollen Sie einen Besitzer suchen ?","Suchen?",JOptionPane.YES_NO_OPTION);
	if(k==0){
		String v = JOptionPane.showInputDialog("Geben Sie bitte das Kennzeichen zum gesuchten Besitzer ein :");
		if(v.equals(ownerList)){
			
			...
		                             }
		
		 
	        }
	
	                                                      }

Es gibt 3 Listen , OwnerList,AddressList,und LicensPlateList jetzt soll der Eintrag aus LicensePlateList der durch den Benutzer festgelegt wird verglichen werden mit den Einträgen aus der Liste . Ausgegeben werden soll dann der passende Eintrag aus der ownerList ... Kann jmd helfen ?
 
listen heißt, es gibt dort nur strings? und du vergleichst einen übergebenen string mit den strings aus der liste? wenn die übereinstimmen, gibst du den gefundenen (absolut identischen) string zurück? dann nimm doch gleich den übergebenen, die sind ja doch dann gleich! 😀 oder willst du nur schauen ob er dort vorhanden ist?

oder was ist in den listen? user-objekte? geben die dann per toString() ihren namen zurück? dann ist das design wohl schlecht gewählt. die userobjekte sollten dann in einer map statt in einer list stecken und über den übergebenen namen gesucht werden. dann macht das suchen auch sinn 🙂

oder hab ich die lage garnicht gecheckt? 😀
 
Hm... so ganz klar wird mir das nicht. Was ist ein "Gegenstück" zu einem String und in wie fern sind einträge in verschiedenen Listen "passend"?
 
Hmm ok ich versuch mich verständlicher auszudrücken 🙂 ,

angenommen ich habe folgende Listen :

Java:
	private static String[] licensePlateList = new String[5]; 
	private static String[] ownerList = new String[5]; 
	private static String[] addressList = new String[5];

Der Benutzer gibt auf Anforderung die Einträge in die Liste ein und wieder angenommen es kommt zu folgendem :

licensePlateList[0]=123123
licensePlateList[1]=435435
licensePlateList[2]=213124
licensePlateList[3]=463452
licensePlateList[4]=123124

ownerList[0]=Hans
ownerList[1]=Otto
ownerList[2]=Jürgen
ownerList[3]=Detlef
ownerList[4]=Will

AddressList[0]=Hansstraße
AddressList[1]=Ottostraße
AddressList[2]=Jürgenstraße
AddressList[3]=Detlefstraße
AddressList[4]=Willstraße

So jetzt gibt als nächtes der Benutzer beispielsweise auf Anforderung wieder 123123 ein dann soll "Hans" bzw. "Hansstraße" ausgegeben werden ... versteht ihr mein Problem 😀
 
hm, größeres problem als ich angenommen hatte 😀

ich glaub was du wirklich brauchst, ist eine relationale datenbank 🙂 sie sind beim suchen auch verdammt effektiv, dein problem ist eigentlich das paradebeispiel dafür. klar geht das auch mit strukturen in java, aber diese brauchen jedenfalls eine beziehung zueinander? woher sollen deine arrays (keine listen!! vielleicht n anderen variablennamen wählen!) wissen, dass licensePlateList[0] zu ownerList[0]=Hans und AddressList[0]=Hansstraße gehört? ok, in deinem falle über den index [0]. dann musst du wohl in einer schleife alle einträge anhand des index miteinander verketten. das fünktioniert zwar nur so lange wie die listen in dieser ordnung bleiben. wartbar und flexibel ist was anderes 😉 aber scheint für deine aufgabe wohl zu funktionieren 😉

also eine forschleife von 0-4, mit dem index jeweils daten aus allen ARRAYs 🙂 holen, verketten und ausgeben 🙂 brauchst du code-hilfe, oder bekommste das hin? bei weiteren fragen hilft dir sicher einer weiter 🙂
 
Öh.
Java:
v.equals(ownerlist)
wird niemals im Leben Funktionieren weil du einen String mit einer Liste vergleichst. Das ist ungefähr so als wenn du überprüfen willst ob zwei Autos gleich sind und dann zum überprüfen vergleichst ob das Auto das selbe wie das Autohaus ist.

Wenn OwnerList eine Liste mit Strings ist musst du schon einzeln die Liste durchgehen und vergleichen. Hier mal ein dummes Beispiel wies gehen könnte.

Java:
import java.util.Iterator;
import java.util.LinkedList;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		LinkedList<String> liste = new LinkedList<String>();
		liste.add("A");
		liste.add("B");
		liste.add("C");
		liste.add("D");
		liste.add("E");
		liste.add("F");
		liste.add("G");
		String eingabe = "G";
		
		// Möglichkeit 1
		Iterator<String> it = liste.listIterator();
		
		while(it.hasNext())
		{
			if(it.next().equals((eingabe))) System.out.println("Gefunden!");
		}
		
		// Möglichkeit 2
		for(int i = 0; i < liste.size(); i++)
			if(liste.get(i).equals(eingabe)) System.out.println("Gefunden!");
			
	}
}

Edit: Eh, thread zu lange offen gelassen und anderes gemacht... Naja, wenns einfach nur Arrays sind musste halt die Arrayfelder einzeln überprüfen...

Java:
for(int i = 0; i < ownerlist.length(); i++)
if(ownerlist[i].equals(eingabe)) System.out.println("Woopwoopwoop");
 
Zuletzt bearbeitet:
Java:
	public static void main(String[] args) {
		List<String> liste = new LinkedList<String>();
		liste.add("A");
		liste.add("B");
		liste.add("C");
		liste.add("D");
		liste.add("E");
		liste.add("F");
		liste.add("G");
		String eingabe = "G";

		// Möglichkeit 3
		System.out.println(liste.contains(eingabe));
	}

wenn dann schon so 😉

aber ich glaub er möchte nicht nur prüfen ob der string auch in der anderen map (edit: äh liste, äh array 😀 ) ist 🙂
 
wenn dann schon so 😉

aber ich glaub er möchte nicht nur prüfen ob der string auch in der anderen map (edit: äh liste, äh array 😀 ) ist 🙂

Stimmt, hatte vergessen das das auch geht :E. Aber wenn er den Index braucht, müsste er es wie bei mir in Methode 1 und 2 machen 😛. Einigen wir uns drauf das eine Datenbank oder eine eigene Datenstruktur (Z.B. Liste mit Containerobjekten) besser wäre. ^^
 
selber 😛

wenn er den index braucht soll er beim array bleiben, indexe haben imho mit listen nix zu tun 😉 *keuleschwing*

ja, mit der db sind wir uns einig 😉
 
Java:
	public static String getOwner(String licensePlateList){
		
		int k=0;
		
	k=JOptionPane.showConfirmDialog(null,"Wollen Sie einen Besitzer suchen ?","Suchen?",JOptionPane.YES_NO_OPTION);

So jetzt kommt die for - Schleife , richtig ? dass heißt er geht jeden einzelnen Eintrag durch ...
Java:
	for(int j = 0; j <= ownerList.length && k==0; j++){
		
		String y=JOptionPane.showInputDialog("Kennzeichen eingeben:");
Jetzt soll die Eingabe verglichen werden mit den Einträgen von 0 bis <= der Listenlänge von owners ... Und wenn es einen , ich nenn es mal "Hit" gibt , soll er die Ausgabe tätigen ...
Java:
		if (ownerList[j].equals(y)){
			

		}
Mit der Möglichkeit 3 ? Tut mir Leid wenn ich mich was schwer anstelle aber es hat noch nicht klick gemacht :S
Java:
return ownerList.contains(y)  ?
Aber das funktioniert ja nicht irgendwas stimmt bei mir noch nicht ...

Java:
	                           }
	
	                                                           }
 
Noch einmal der Code im ganzen -.- Sorry
Java:
	public static String getOwner(String licensePlateList){
		
		int k=0;
		
	k=JOptionPane.showConfirmDialog(null,"Wollen Sie einen Besitzer suchen ?","Suchen?",JOptionPane.YES_NO_OPTION);
	
	for(int j = 0; j <= ownerList.length && k==0; j++){
		
		String y=JOptionPane.showInputDialog("Kennzeichen eingeben:");
		
		if (ownerList[j].equals(y)){
			
			
		}

			
			
	                           }
	
	                                                           }
 
Mit deinen Listen/Arrays/Wasauchimmer wirst du nicht weiterkommen. Erstell dafür eine eigene Klasse, wo du alles dazugehörige Informationen speicherst und halte nur eine Liste/Array/Wasauchimmer von diesen Objekten fest.
DBs werde dich auf deinem Wissensstand nur verwirren.
 
hm, ich versteh das mit dem hit jetzt immernoch nicht :/

einen hit / treffer gäbe es ja nur, wenn die strings gleich wären. dann würdest du einen vergleich von zwei identischen strings haben. aber das willst du ja nicht, oder? du willst doch die werte aus den array zusammensetzten, oder? und alle einträge mit dem gleich index gehören zusammen, oder?


die schleife ist dann richtig, dann einfach beim richtigen index:

Java:
myString = licensePlateList[index] + ownerList[index] + AddressList[index]

oder in welcher reihenfolge auch immer 🙂
 
Mit deinen Listen/Arrays/Wasauchimmer wirst du nicht weiterkommen. Erstell dafür eine eigene Klasse, wo du alles dazugehörige Informationen speicherst und halte nur eine Liste/Array/Wasauchimmer von diesen Objekten fest.
DBs werde dich auf deinem Wissensstand nur verwirren.

Habe wohl etwas länger gebraucht - hier mal ein kleiner Denkanstoß:
Java:
import java.util.HashMap;
import java.util.Map;

public class Test {
	public static void main(String[] argv) {
		
		Owner owner1 = new Owner("Hans","123123","Hansstraße");
		Owner owner2 = new Owner("Otto","435435","Ottostraße");
		Owner owner3 = new Owner("Jürgen","213124","Jürgenstraße");
		Owner owner4 = new Owner("Detlef","463452","Detlefstraße");
		Owner owner5 = new Owner("Will","123124","Willstraße");
		
	    Map<String,Owner> ownerByName = new HashMap<String, Owner>();
	    Map<String,Owner> ownerByPlatenumber = new HashMap<String, Owner>();
	    Map<String,Owner> ownerByAddress = new HashMap<String, Owner>();
	    
	    ownerByName.put(owner1.getName(),owner1);
	    ownerByName.put(owner2.getName(),owner2);
	    ownerByName.put(owner3.getName(),owner3);
	    ownerByName.put(owner4.getName(),owner4);
	    ownerByName.put(owner5.getName(),owner5);
	    
	    ownerByPlatenumber.put(owner1.getLicensePlate(),owner1);
	    ownerByPlatenumber.put(owner2.getLicensePlate(),owner2);
	    ownerByPlatenumber.put(owner3.getLicensePlate(),owner3);
	    ownerByPlatenumber.put(owner4.getLicensePlate(),owner4);
	    ownerByPlatenumber.put(owner5.getLicensePlate(),owner5);
	    
	    ownerByAddress.put(owner1.getAddress(),owner1);
	    ownerByAddress.put(owner2.getAddress(),owner2);
	    ownerByAddress.put(owner3.getAddress(),owner3);
	    ownerByAddress.put(owner4.getAddress(),owner4);
	    ownerByAddress.put(owner5.getAddress(),owner5);
	    
	    System.out.println(ownerByAddress.get("Hansstraße"));
	    System.out.println(ownerByName.get("Otto"));
	    System.out.println(ownerByPlatenumber.get("123124"));
	}
	
	
	
}

class Owner{
	private String licensePlate;
	private String name;
	private String address;
	public Owner(String name, String licensePlate, String address){
		this.name = name;
		this.licensePlate = licensePlate;
		this.address = address;
	}
	public String getLicensePlate() {
		return licensePlate;
	}
	public String getName() {
		return name;
	}
	public String getAddress() {
		return address;
	}
	public String toString(){
		return name + ";"+address+";"+licensePlate;
	}
}
 
Ne, das ist nicht so das Wahre. Ich dachte eher an eine einzige
Code:
List<Owner>
mit verschiedenen Comparator'en. Man könnte auch eine Utility-Klasse mit
Code:
public static Owner getOwnerByName(String ownerName, List<Owner> list)
usw machen
 
Ne, das ist nicht so das Wahre. Ich dachte eher an eine einzige
Code:
List<Owner>
mit verschiedenen Comparator'en. Man könnte auch eine Utility-Klasse mit
Code:
public static Owner getOwnerByName(String ownerName, List<Owner> list)
usw machen

Kommt immer drauf an was man machen möchte.
 

Zurück
Oben