Vectorinhalt prüfen!

Hallo,
habe ein XML -File ausgelesen und habe diesen auch in einem vector „geschrieben“

wenn ich mir den auf der konsole ausgeben lasse…steht dann da…

[id=1, url= asas.html] , [id=2, url=aedfa.html], …

so und ich wollte ganz einfach, bloß steh ich auf den Schlauch, eine abfrage machen.
Wenn id = 1 , gib mir die dazugehörige url.

(vzusammen ist der vector)

if (vzusammen.equals(„id=1“)){
System.out.println("url zu 1: " + url);
}else
System.out.println(„keine url“);
und hier gibt er mir immer, keine Url aus, wieso?

Hallo,

(vzusammen ist der vector)

if (vzusammen.equals(„id=1“)){

wenn vzusammen das Vectorobjekt ist und du das mit „id=1“, also einem String vergleichst wird equals nie true zurückgeben.

Gruß
Heavy

Hallo,

Du musst das Zeug erstmal wieder aus dem Vector rausholen.
Etwa so:

import java.util.Iterator;
import java.util.Vector;

public class CollectionTest {

 public static void main(String[] args) {
 Vector vzusammen = new Vector(2);
 vzusammen.add(new Honk(1, "a.a.a"));
 vzusammen.add(new Honk(2, "b.b.b"));

 for (Iterator it = vzusammen.iterator(); it.hasNext():wink: {
 Honk h = (Honk) it.next();
 if (h.id == 1) {
 System.out.println(h.url);
 }
 }
 }

 static class Honk {
 int id;
 String url;

 public Honk(int id, String url) {
 this.id = id;
 this.url = url;
 }
 }
}

Gruss
Patrick

an sich stimmt es, nur was ist das Honk? das habe ich ja noch nie gehört :frowning:!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

das der mir immer false ausgibt ist mir klar!
Aber warum!?
Man vergleicht doch mit equals? oder doch ==?

Hallo,

an sich stimmt es, nur was ist das Honk? das habe ich ja noch
nie gehört :frowning:!

Das ist einfach nur ein allgemeines Beispiel, was im Prinzip passieren
muss, wenn man in einen Vector Objekte reinpackt und darauf dann
zugreifen will. Haette die Klasse auch Bing, Bong oder HansDieter
nennen koennen.

Was fuer Objekte hast du denn in den Vector reingetan?
Ich habe nur geraten, dass da Objekte vom Typ einer eigenen
Klasse (hier Honk) drinnen sind.
Der Vector ist quasi nur ein Container fuer Objekte. Deshalb
funktioniert das mit equals auch nicht. Du vergleichst Vector mit
String, equals ist aber eigentlich nur fuer den Vergleich zweier
Objekte vom gleichen Typ gedacht.

Gruss
Patrick

Ah ja, das war heut früh noch bissl komisch mit dem Honk :wink:!

Ja das equals nur mit gleichen Objekten vergleicht, weiß ich.

Also…
Die Print ausgabe sieht so aus:

[[1, adasd.html], [2,asas.html], …]

beides sind Strings.

Da dachte ich mir dann noch!

Iterator it = vzusammen.iterator();
while (it.hasNext()){
Object o = it.next();
if (o.toString().equals(„1“)){
System.out.println("url: "+url);
}else{
System.out.println(„keine url“);
}

aber da sagt er mir auch, keine url :frowning:

[[1, adasd.html], [2,asas.html], …]

beides sind Strings.

Bist du dir sicher, dass das beides Strings sind? Mich
wundert, dass da [1, adasd.html] steht. Wenn ich mir hier
einen Vector mit Strings ausgeben lasse, sieht das so aus
(Vector enthaelt 2 String-Objekte): [a.a.a, b.b.b]

Es muss erst klar sein, was fuer Objekte in dem Vector
sind. Kannst du vielleicht die Zeile posten, in der du
den Vector befuellst?

Gruss
Patrick

File file = new File(„gesamt.xml“);
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(file);
NodeList links = doc.getElementsByTagName(„link“);
System.out.println("getElement: "+ doc.getElementsByTagName(„link“));
for (int i = 0; i

vlinker.add(id);
vlinker.add(url);
vzusammen.add(vlinker);
}
id und url sind strings!und in vzusammen steht halt alles drin

Aha, du packst also einen Vector in einen Vector. Also, sind die
Objekte in vzusammen doch keine String-Objekte sondern Vector-Objekte,
die wiederum String-Objekte enthalten.

Vector[Vector[String, String], Vector[String, String],…]

Zur Aufloesung braeuchtest du also eine doppelte for(oder while)-Schleife
mit 2 Iteratoren.
Wirkt umstaendlich und ist mit zu viel Overhead verbunden. Ich wuerde
da eher an eine andere Datenstruktur denken. Z.B. spricht nichts
dagegen direkt das Element in den Vector zu packen.
(Vector[Element, Element, …])
Oder eben in eine eigene Klasse. (Vector[Honk, Honk, …])
Aufloesung waere dann aehnlich bzw. gleich dem Honk-Beispiel.

Die removeElement() Aufrufe kannst du dir im uebrigen an der Stelle
auch sparen, da du mit vlinker = new Vector() ein neues Objekt
erzeugst, welches eh leer und noch nicht in vzusammen vorhanden ist.

Gruss
Patrick

danke,

aber wenn ich diese direkt mache
[vector[string, string, string,…]]

dann kann ich ja nicht unterscheiden, welche id zu welcher url gehört!

aber wenn ich diese direkt mache
[vector[string, string, string,…]]
dann kann ich ja nicht unterscheiden, welche id zu welcher url
gehört!

Korrekt, deshalb ja auch der Vorschlag direkt das Element
(oder ein eigenes Objekt) in den Vector zu schreiben.
Damit haettest du id und url immer vereint in einem Objekt.
Wenn du nicht mit dem Element weiterarbeiten willst, dann
bau dir ein eigenes. (siehe Honk-Beispiel)

Gruss
Patrick

ok danke…hab das jetz auf dein Honk beispiel umgemünzt:

File file = new File(„gesamt.xml“);
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(file);
NodeList links = doc.getElementsByTagName(„link“);
System.out.println("getElement: "+
doc.getElementsByTagName(„link“));
for (int i = 0; i

hallo

hast du eigentlich schon mal daran gedacht, eine hashmap zu verwenden? v.a. wenn ich an deine ständigen zugriffe über einen index denke. wäre viel effizienter und leichter zu programmieren. schau einfach mal in der java-api nach.

lg
erwin

versuch mal

if (h.id.equals("1")) {

Gruss
Patrick

Stimmt ja, ist ja ein String :wink:!
danke dir!
Haut jetz mit „Honk“ hin …

ach heute früh dachte ich, du beleidgst micht, weil ich nicht selber darauf gekommen bin. (Honk)

Schönen Tag noch :smile:!

Gruß
Steve

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ach heute früh dachte ich, du beleidgst micht, weil ich nicht
selber darauf gekommen bin. (Honk)

Ja, koennte man so auslegen, war aber nicht so gemeint. Sorry,
falls es so rubergekommen ist.

Die Idee von Erwin mit der HashMap finde ich auch gut. Vielleicht
wirfst du da auch mal einen Blick drauf.

Gruss
Patrick