Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

String::replace, String::replaceAll

Empfohlene Antworten

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

public Color(String name,String color[COLOR="red"])[/COLOR]{

Schließende Klammer fehlt.

danke ._., aber das oben ist ja nur ein testcode, der, nachdem die klammer ja fehlt, nicht mal zum compilen gehen würde.

Schließende Klammer fehlt.

Und das soll eine Nullpointer Exception liefern :D 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.

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?

Und das soll eine Nullpointer Exception liefern :D Wohl kaum. Da würd zuerst der Compiler dran scheitern!

Das ist mir schon klar. Wollte ihn nur darauf hinweisen. :floet:

Bearbeitet von flashpixx
Typo

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.