# ArrayList ObjektElement behalten und neues hinzufügen



## Xerxes20 (30. Januar 2011)

Guten Tag liebe Gemeinde,

es gibt ja get und set-Methoden immer für ein Objekt, jetzt wollte ich fragen, ob es auch eine add Methode gibt, die nicht das alte ersetzt sondern etwas neues hinzufüg?

Ich habe nämlich folgendes Problem:

Wenn ich ein Fenster öffne wird ein leeres Objekt in einem Array erstellt.

Das Objekt beinhaltet sagen wir mal Hände und Füße. Man kann immer wieder neue Hände und Füße hinzufügen.

Wenn man eine neue Hand hinzufügen will, öffnet sich ein weiteres Fenster und dort kann man einer Hand einen Namen geben, bei Klick auf ok wird die Hand in dem Objekt unter "Hände" gespeichert.

Wenn man jetzt wieder eine neue Hand einfügen will, wird die alte durch die set-Methode ja überschrieben, dass heißt das alte ist weg!

Desweiteren sollten die Objekte später beim aufruf in einer Liste ihre Hände und Füße so ausgeben, wie sie eingefügt wurden.

Bitte um Hilfe


----------



## Akeshihiro (30. Januar 2011)

Warum benutzt du nicht einfach die add-Methode? Wer hat dir gesagt, dass man das mit set() macht? set() ist nur zum Ersetzen bereits bestehender Einträge.


----------



## Xerxes20 (30. Januar 2011)

Meinst du die add Methode der arrayList oder allgemein eine add-Methode schreiben? Ich will ja kein neues Objekt hinzufügen sondern etwas zu einem schon vorhandenen Element eines Objektes hinzufügen.


----------



## Akeshihiro (30. Januar 2011)

Hmm... Wenn ich das richtig verstehe, dann willst du also ein bestehendes und in der Liste vorhandenes Objekt manipulieren und nicht ein neues hinzufügen. Dann musst du doch nur auf das Objekt zugreifen und die entsprechenden Methoden aufrufen.


```
List list = new ArrayList();
list.add(new MyObject());
list.add(new MyObject());
list.add(new MyObject());

list.get(0).setXY(<value>);
list.get(0).setYZ(<value2>);

// oder so
MyObject o = list.get(0);
o.setXY(<value>);
o.setYZ(<value2>);
```


----------



## Xerxes20 (30. Januar 2011)

genau du hast es richtig verstanden!

Leider werde ich aus dem code nicht schlau 

Du holst das Objekt an der Stelle 0 und setzt etwas ein, genau das ist das Problem die set-Methode löscht das alte und setzt ein neuen String, ich will ja dass er es hinzufügt


----------



## Akeshihiro (30. Januar 2011)

Ich habe die set-Methode des Objektes in der Liste aufgerufen und nicht die set-Methode der Liste. Es wird in der Liste nix ersetzt, es wird einfach nur in dem Fall das erste Objekt verändert, es bekommt neue Werte, mehr nicht. Wo ist also das Problem?

Vielleicht solltest du mal deinen Code posten, die Sache könnte dann vielleicht etwas aufschlussreicher sein.


----------



## Xerxes20 (30. Januar 2011)

werden denn dann die alten Werte behalten? Ich will ja nur neue hinzufügen


----------



## Akeshihiro (30. Januar 2011)

Ok, dann mal anders. Es sollen keine neuen Objekte zur Liste hinzugefügt bzw. ersetzt werden. Es sollen jeweils die Objekte in der Liste verändert werden, aber anscheinend sollen zu den Werten in den Objekten welche hinzukommen anstatt sie zu ersetzen.

Kann es sein, dass du eine Art verschachtelte Liste hast, also eine Liste in einer Liste? Von mir aus mit eigenen Objekten, aber als eine Art Liste entworfen. Weil sonst versteh ich da echt nix, da wäre der Code schon echt gut.


----------



## Xerxes20 (30. Januar 2011)

vergessen wir das ganze!

Ich habs hinbekommen! Man nehme einfach die geht Methode und füge den String den hinzufügen will hinten dran eignetlich ganz simpel!

Jetzt wüsste ich gerne wie man Strings filtert, also z.B.:

Tim(ängstlich): "Ich habe angst"

Ich möchte Tim, ängstlich, und den text herausfiltern geht das?


----------



## Akeshihiro (30. Januar 2011)

Sind die Strings immer nach dem gleichen Muster aufgebaut? Wenn ja, dann ginge das und zwar mit RegEx. Tutorials gibts dazu auch jede Menge, sollte also nicht so das Problem sein.


----------



## Xerxes20 (30. Januar 2011)

Also die Strings haben immer ein ":" aber die anweisung "(ängstlich)" kommt nur manchmal vor

zunächst möchte ich es aber erstmal nur hinkriegen dass er folgenden String filtert:

"Tim:Ich habe Angst"

in "Tim" und "Ich habe Angst"

Ich habe leider bis jetzt noch nie sowas angewandt, deswegen bitte ich um ein Beispiel.


----------



## Akeshihiro (30. Januar 2011)

In dem Fall ist es leicht, einfach:

```
String[] splittedString = "Tim:Ich habe Angst".split(":");
```


----------



## Xerxes20 (30. Januar 2011)

Hat super geklappt jetzt fehlt mir das aber irgendwie mit der regieanweisung, das bekomme ich net hin.

also mit der methode von dir werden die an der stelle 0 und 1 gespeichert, aber wie filter ich die regieanweisung heraus?


----------



## Akeshihiro (30. Januar 2011)

Ja, da wird es etwas komplizierter. Wie gesagt, kann man recht bequem mit RegEx lösen. Ich habs jetzt mal so gemacht:

```
package de.tutorials.forum.hilfe.xerxes20.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExSample {
	public static void main(String[] args) {
		String str = "Tim(ängstlich): Ich habe Angst";
		String str2 = "Tim: Boah macht das Spaß!";
		Pattern p = Pattern.compile("([a-zA-Z0-9äÄöÖüÜß]+)(\\(([a-zA-Z0-9äÄöÖüÜß]+)\\))?: (.+)");
		Matcher m = p.matcher(str);

		while(m.find()) {
			System.out.println("===============================");
			System.out.println(str);
			System.out.println("===============================");
			System.out.println(m.group(0));
			System.out.println(m.group(1));
			System.out.println(m.group(2));
			System.out.println(m.group(3));
			System.out.println(m.group(4));
		}
		
		m = p.matcher(str2);
		while(m.find()) {
			System.out.println("===============================");
			System.out.println(str2);
			System.out.println("===============================");
			System.out.println(m.group(0));
			System.out.println(m.group(1));
			System.out.println(m.group(2));
			System.out.println(m.group(3));
			System.out.println(m.group(4));
		}
	}
}
```
Ausgabe:


> ===============================
> Tim(ängstlich): Ich habe Angst
> ===============================
> Tim(ängstlich): Ich habe Angst
> ...


Zuerst hab ich den eigentlichen String ausgegeben und dannach den Fund und die einzelnen Gruppen (eine Gruppe wird von einem Klammerpaar umschlossen). Der Index 0 ist dabei der gesamte Fund, man kann dazu die group-Methode auch ohne Parameter aufrufen. Die Indezes 1, 2, usw. sind dabei die einzelnen Gruppen. Diese können sehr hilfreich sein, wenn man nicht nur einen String nach einem bestimmten Muster sucht, sondern ihn dann auch noch in seine einzelnen Bestandteile zerlegen will, so wie es in diesem Fall war.

Das Suchmuster wirst du wahrscheinlich nicht sofort verstehen, aber wie gesagt, da gibt es genug Tutorials im Internet, weshalb man hier nicht darauf eingehen braucht.


----------



## Xerxes20 (30. Januar 2011)

Danke, habs nun endlich geschafft


----------

