laubi Geschrieben 8. Juli 2011 Geschrieben 8. Juli 2011 hey leute, ich hoffe ihr könnt mir bei meinem kleinen Problem mit java helfen: ich möchte in einem string alle elemente durch neue ersetzen, die "templates" sind in einer arrayliste gespeichert:public class test{ [INDENT] public class Color{[INDENT] public String name; public String color; public Color(String name,String color{[INDENT] this.name=name; this.color=color;[/INDENT] } [/INDENT]} ArrayList <Colors>colors=new ArrayList<Colors>(); public test(){ [INDENT] this.colors.add(new Color("{red}","RED")); this.colors.add(new Color("{blue}","BLUE")); //... [/INDENT] }private String replaceColors(String msg){ [INDENT]for(int i=0; i<this.colors.size(); i++){[INDENT]while(msg.contains(this.colors.get(i).name){[INDENT]msg=msg.replace(this.colors.get(i).name,this.colors.get(i).color);[/INDENT] }[/INDENT]}return msg;[/INDENT]}[/INDENT]} nun kommt aber jedes mal wenn ich den code ausführe eine NullPointerException. wie kann ich das am besten lösen? und ich habe auch gedacht man kann die innere while schleife durch ein replaceAll ersetzen, allerdings kann ich das ja nicht mal testen weil es wie gesagt nicht funktioniert. ich hoffe ihr könnt mir dabei helfen. lg Laubi
Harry1972 Geschrieben 8. Juli 2011 Geschrieben 8. Juli 2011 public Color(String name,String color[COLOR="red"])[/COLOR]{ Schließende Klammer fehlt.
laubi Geschrieben 9. Juli 2011 Autor Geschrieben 9. Juli 2011 danke ._., aber das oben ist ja nur ein testcode, der, nachdem die klammer ja fehlt, nicht mal zum compilen gehen würde.
::1 Geschrieben 9. Juli 2011 Geschrieben 9. Juli 2011 Zitat Schließende Klammer fehlt. Und das soll eine Nullpointer Exception liefern Wohl kaum. Da würd zuerst der Compiler dran scheitern! Zum Thema: An welcher Stelle fliegt die Nullpointer-Exception? [COLOR="red"]ArrayList <Colors>colors=new ArrayList<Colors>();[/COLOR] public test(){ this.colors.add(new Color("{red}","RED")); this.colors.add(new Color("{blue}","BLUE")); } Pack die Initialisierung der Liste mal in den Konstruktor.
Ezra Geschrieben 9. Juli 2011 Geschrieben 9. Juli 2011 Bei Deinem Testcode ist noch einiges mehr im Argen als nur die Klammer. An dieser Stelle ignoriere ich mal, dass die Code Conventions verletzt werden. Aber das hier dürfte nicht kompilieren:ArrayList <Colors>colors=new ArrayList<Colors>(); Die Klasse Colors gibt es in Deinem Beispiel nicht, sondern nur Color. while(msg.contains(this.colors.get(i).name){ Auch hier fehlt eine schließende runde Klammer. Dein Code wirft keine Exception. Der kompiliert nicht einmal. Aber auch wenn man das korrigiert, wirft er keine Exception. Es ist wesentlich sinnvoller, wenn Du genau das Codebeispiel zur Verfügung stellst, das sich so verhält, wie Du angibst. Sonst können wir nämlich nur in die Glaskugel gucken. Zudem wird bei einer Exception nicht ohne Grund die Zeile angegeben, die sie ausgelöst hat. Bitte darauf achten und vor allem hier mit angeben. Zitat und ich habe auch gedacht man kann die innere while schleife durch ein replaceAll ersetzen, allerdings kann ich das ja nicht mal testen weil es wie gesagt nicht funktioniert. Du kannst Die Schleife auch einfach gleich weglassen. Die Java API sollte Dein bester Freund sein. Das hier sagt sie zu replace: Zitat public String replace(CharSequence target, CharSequence replacement) Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence. The replacement proceeds from the beginning of the string to the end, for example, replacing "aa" with "b" in the string "aaa" will result in "ba" rather than "ab". Beachte das Wörtchen "each". Zitat Pack die Initialisierung der Liste mal in den Konstruktor. Was soll das bringen?
Harry1972 Geschrieben 9. Juli 2011 Geschrieben 9. Juli 2011 (bearbeitet) ::1 schrieb: Und das soll eine Nullpointer Exception liefern Wohl kaum. Da würd zuerst der Compiler dran scheitern! Das ist mir schon klar. Wollte ihn nur darauf hinweisen. :floet: Bearbeitet 9. Juli 2011 von flashpixx Typo
Sacaldur Geschrieben 14. Juli 2011 Geschrieben 14. Juli 2011 bei deiner NullPointerException kann auch ich aus bereits genanntem Grund nicht helfen allerdings würde ich dir folgende Codeänderungen empfehlen: es ist nicht notwendig, eine eigene Klasse Color (oder Colors) zu verwenden (sofern sie nur für die Auflistung in einer ArrayList verwendet wird) ich würde eher zu einer HashMap raten, welche Schlüssel-Wert-Paare speichern kann dazu müsstest du in der for Schleife nicht mehr alle Color-Objekte, sondern alle Schlüssel durchgehen und ggf. den zugehörigen Wert da du in der for Schleife die Daten der ArrayList nicht veränderst, könntest du genauso eine for each Schleife verwenden der Kopf sähe wie folgt aus:for(Color color:colors) der Vorteil ist, dass man mit color Zugriff auf das aktuelle Objekt hat und nicht erst über die get-Methode (oder ind anderen Fällen über den Indexoperator) dieses Objekt abholen muss dadurch wird der Code kürzer, übersichtlicher und verständlicher (bei einer HashMap könnte man entsprechend die Schlüssel auf diese Art durchgehen) ich hoffe, dass du deinen richtigen (?) Code besser formatierst (unter eclipse einfach ab und zu STRG+Umschalt+F drücken) Sacaldur
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden