# String aus einer ArrayList suchen



## tOBIvAAN (19. Okt 2010)

n' abend,
sitze seit längerem mal wieder an java und bekomme nichts mehr hin.
1.)
Ich lese eine Textdatei in eine ArrayList. Jetzt sieht der Text in der Datei etwa so aus:

name/vorname/password/nummer/4/nein

in meiner System.out.println wird mir folgendes angezeigt:

[Student@19821f]

Warum??

2.)
wie kann ich einen (von mehreren) String aus meiner arrayList raussuchen (über den vergleich einer eingegebenen nummer) und auf den den 3.Wert (password) zugreifen?? (und den dann mit einer Eingabe vergleichen...)??

Bsp:
mein String aus meiner arrayList: Grünholz/Roberto/freibier/123456/4/ja

Jetzt suche ich nach einer Nr.- nämlich: 123456
Es soll mir oben genannter String gezeigt werden.

Danke für eure hilfe


----------



## mabuhay (19. Okt 2010)

Hallo

Wie der Name der ARRAYList ja schon sagt, ist es ein Array, besteht also aus mehreren Elementen. Schreibst du einfach System.out.println(deinearraylist) wird nur der Objektname/Addresse ausgebeben, es weiss ja nicht welches Element du willst. Schau dir mal die Javadoc von ArrayList an, und versuchs mit der get()-Methode 

mfg


----------



## XHelp (19. Okt 2010)

Es hört sich aber eher dannach an, also ob du bei einer Map besser aufgehoben wärst...
Bei einer Liste musst du ja immer die ganze Liste durchgehen und jede Nummer mit der gesuchten vergleichen. Bei einer Map könntest du anhand der Nummer direkt auf das Element zugreifen.

Um das Passwort zu bekommen bietet sich die split-Funktion eine Strings an.


----------



## Network (19. Okt 2010)

Du solltest die Nummer vieleicht am Anfang jedes Strings schreiben.

Dann kannst du mit:

```
ArrayList<Strings> arrayListName = new ArrayList<Strings>();
String nummer;

for( int i = 1; i < ArrayListName.size(); i++ )
{
         if( arrayListName.get( i ).startsWith( nummer ) )
         {
                  // Hier halt alles beliebige einsetzen. In deinem Fall währe es ehrheblich leichter, wenn du die Infos nicht alle in eine Zeile schreiben würdest. Das muss man jetzt noch alles erst trennen und dann:
                  System.out.println( arrayListName.get( i ).substring( x ) );
         }
}
```


----------



## eRaaaa (19. Okt 2010)

Also wir können ja jetzt ruhig alle weiter raten und Tipps geben, aber ob`s das bringt? (mit so wenig Infos ???:L Und laut der Ausgabe sieht`s imo auch eher so aus als wenn er aus der einen Zeile ein Studenten-Objekt macht --> @TO: zu deinem "Warum?"toString)

# Zeige doch am Besten mal wie dein Code momentan aussieht... #

Wenn du wirklich schon die Zeile splittest und ein Studentenobjekt erstellst, könnte man evtl. den Weg von XHelp mit der Map gehen..Key = der 5. gesplittete Werte : Wert = das ganze Objekt

>>Es soll mir oben genannter String gezeigt werden.

Das _könnte_ man ja dann wiederum so in der toString-Methode oder in irgendeiner anderen format-Methode oder wie auch immer implementieren...


----------



## tOBIvAAN (20. Okt 2010)

Das mit der map ist denk ich auch eine ganz gute Idee. Muß nur mal rausfinden wie man sowas umsetzt. 
Hier ist mein bisheriger Code in den die ArrayList, sowie eben eine solches "Auswahl-Sortier-Suchnachwas-Ding" rein soll. Dahinter steht eine klasse "Student" mit den jeweiligen Strings (name, vorname,...) sowie get- & set- Methoden.

- Gesplittet sind die Werte
- die sollten schon hintereinander stehen. ich denke das ist einfacher. ich will ja nicht nur den ersten Werte mit was vergleichen, sondern auch mal den 3. oder den 5.


```
import java.util.*;
import java.io.*;

public class ListeStud {
	
	ArrayList<Student> studList = new ArrayList<Student>();
	
	public void sortieren(){
		getStuds();
		System.out.println(studList);
		Collections.sort(studList);
		System.out.println(studList);
	}
	
	void getStuds(){
		try{
			File datei = new File("StudentenListe.txt");
			BufferedReader reader = new BufferedReader(new FileReader(datei));
			String zeile = null;
			while ((zeile = reader.readLine()) != null){
				addStud(zeile);
			}
		}
		catch (Exception ex){
			ex.printStackTrace();
		}
	}
	
	void addStud(String zuParsendeZeile){
		String[] tokens = zuParsendeZeile.split("/");
		Student nächsterStudent = new Student(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[6]);
		studList.add(nächsterStudent);
	}

}
```

Also wie schon beschrieben, würde ich jetzt gerne einen eingegebenen Wert mit z.B. "tokens[3]" vergleichen und wenn dieser Vergleich "true" ist, dann werden mir z.b. alle Strings aus der List angezeigt, bei denen das zutrifft.

ThX


----------



## Michael... (20. Okt 2010)

Da man nicht weiß, wie die Klasse Student aufgebaut ist, nehme ich mal an, das sie Methoden bereit hält, um die entsprechenden Werte zu erfragen.
Also muss man nur über die Liste iterieren und den zu prüfenden Wert mit dem Suchkriterium vergleichen.


----------



## Aldimann (20. Okt 2010)

mabuhay hat gesagt.:


> Hallo
> 
> Wie der Name der ARRAYList ja schon sagt, ist es ein Array, besteht also aus mehreren Elementen. Schreibst du einfach System.out.println(deinearraylist) wird nur der Objektname/Addresse ausgebeben, es weiss ja nicht welches Element du willst. Schau dir mal die Javadoc von ArrayList an, und versuchs mit der get()-Methode
> 
> mfg



Falsch. AbstractCollection überschreibt toString und gibt die Object per String.valueOf() zurück...

Dieses ruft widerum toString auf das mitgegebene Objekt auf.

Was also hier schlicht falsch läuft, es müsste die toString methode in Student implementiert werden.
Zumindest wenn man einen Studenten ausgeben will.

Wenn nicht müsste man halt über die get() methode von Arraylist auf den Studenten zugreifen und dann einzelne Dinge ausgeben...


----------

