laubi Geschrieben 8. Juli 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Harry1972 Geschrieben 8. Juli 2011 Teilen Geschrieben 8. Juli 2011 public Color(String name,String color[COLOR="red"])[/COLOR]{ Schließende Klammer fehlt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
laubi Geschrieben 9. Juli 2011 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
::1 Geschrieben 9. Juli 2011 Teilen Geschrieben 9. Juli 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ezra Geschrieben 9. Juli 2011 Teilen 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. 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: 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". Pack die Initialisierung der Liste mal in den Konstruktor. Was soll das bringen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Harry1972 Geschrieben 9. Juli 2011 Teilen Geschrieben 9. Juli 2011 (bearbeitet) 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 14. Juli 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.