Hi,
ich versuche gerade eine Funktion zu bauen, die Zahlen aus einem String der in einer DB liegt zu extrahieren. Und obwohl ich die verschiedenen Befehle die ich verwende schon zig mal benutzt habe, hat sich irgendwo ein Fehler eingeschlichen und ich sitz nun schon den ganzen Morgen dran und kann ihn nicht finden.
Die Funktion soll im Detail folgendes bewirken:
Es wird ein Objekt angelegt mit einem Namen und zusätzlich sollen dem Objekt die X- und Y-Werte eines Polygons der Form "POLYGON((0 0,50 0,50 50,0 50,0 0))" zugewiesen werden.
Dazu lege ich zuerst ein Objekt an (1.), extrahiere daraus die Zahlen (2.) und trenne anschließend nach X- und Y-Werten (3.). Diese Werte werden dem aktuellen Objekt hinzugefügt und dieses in eine Liste eingefügt (4.). Im Anschluß wird noch aufgeräumt und die Schleife beginnt erneut.
Was ich nun einfach nicht verstehe ist, daß die Objekte die von der Funktion zurückgegeben werden, keinerlei X- und Y-Werte enthalten. D.h. die clear()-Methode hat sich auf alle Objekte ausgewirkt, auch auf die, die schon lange zur Liste hinzugefügt wurden. Lasse ich das clear() weg, stimmt natürlich der String nicht mehr, aber auch hier haben sämtliche Objekte auf einmal die gleichen Werte.
Ich hoffe, jemand hat einen Tipp, was ich übersehe, das kann doch nicht so schwer sein. Oder beinträchtigt Weihnachten das logische Denken ???:L
ich versuche gerade eine Funktion zu bauen, die Zahlen aus einem String der in einer DB liegt zu extrahieren. Und obwohl ich die verschiedenen Befehle die ich verwende schon zig mal benutzt habe, hat sich irgendwo ein Fehler eingeschlichen und ich sitz nun schon den ganzen Morgen dran und kann ihn nicht finden.
Die Funktion soll im Detail folgendes bewirken:
Es wird ein Objekt angelegt mit einem Namen und zusätzlich sollen dem Objekt die X- und Y-Werte eines Polygons der Form "POLYGON((0 0,50 0,50 50,0 50,0 0))" zugewiesen werden.
Dazu lege ich zuerst ein Objekt an (1.), extrahiere daraus die Zahlen (2.) und trenne anschließend nach X- und Y-Werten (3.). Diese Werte werden dem aktuellen Objekt hinzugefügt und dieses in eine Liste eingefügt (4.). Im Anschluß wird noch aufgeräumt und die Schleife beginnt erneut.
Was ich nun einfach nicht verstehe ist, daß die Objekte die von der Funktion zurückgegeben werden, keinerlei X- und Y-Werte enthalten. D.h. die clear()-Methode hat sich auf alle Objekte ausgewirkt, auch auf die, die schon lange zur Liste hinzugefügt wurden. Lasse ich das clear() weg, stimmt natürlich der String nicht mehr, aber auch hier haben sämtliche Objekte auf einmal die gleichen Werte.
Ich hoffe, jemand hat einen Tipp, was ich übersehe, das kann doch nicht so schwer sein. Oder beinträchtigt Weihnachten das logische Denken ???:L
Code:
public List<Objects> getAllObjects() {
List<Objects> objects = new LinkedList<Objects>(); //Liste aller Objekte in der DB
StringBuilder polygon;
java.io.StringReader s;
List<String> numbers = new LinkedList<String>();
List<String> xVals = new LinkedList<String>();
List<String> yVals = new LinkedList<String>();
String lastAdded = "y";
StringBuilder number = new StringBuilder();
Objects currentObject;
char c;
int minusOne;
try {
rs = stmt.executeQuery(getAllObjects);
while(rs.next()) {
currentObject = new Objects(rs.getString("name")); (1.)
polygon = new StringBuilder(rs.getString("geom"));
polygon.delete(polygon.length()-2, polygon.length());
polygon.delete(0, 9);
s = new java.io.StringReader(polygon.toString());
try {
do { (2.)
minusOne = s.read();
c = (char)minusOne;
if(minusOne != -1) {
if(c == ' ' || c == ',') {
numbers.add(number.toString());
number.delete(0, number.length());
} else {
number.append(c);
}
}
} while(minusOne != -1);
numbers.add(number.toString()); //Sonst würde die letzte Zahl weggelassen.
number.delete(0, number.length());
for(int i = 0; i < numbers.size(); i++) { (3.)
number.append(numbers.get(i) + " ");
if(i%2 == 0) {
xVals.add(numbers.get(i));
} else {
yVals.add(numbers.get(i));
}
}
//Weist die eingelesenen Koordinate dem Objekt zu.
currentObject.setXVals(xVals); (4.)
currentObject.setYVals(yVals);
objects.add(currentObject);
numbers.clear();
number.delete(0, number.length());
xVals.clear();
yVals.clear();
}catch(java.io.IOException e) {
System.out.println(e);
}
}
}catch(SQLException e) {
System.out.println(e);
}
return objects;
}