Stringproblem

Status
Nicht offen für weitere Antworten.

Hassbrut

Aktives Mitglied
Hi, hab folgendes (wahrscheinlich total banales) Prob:

Habe einen String bla = "1234567" und möchte die "123" löschen so das in dem String nur noch "4567" steht.
Hab die replaceAll-Methode genommen ( bla.replaceAll("123";"") )

Doch er haut mir immer diesen Fehler rein beim Ausführen:

java.util.regex.PatternSyntaxException: Unclosed group near index 8
NoName (
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.accept(Unknown Source)
at java.util.regex.Pattern.group0(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at hackattack.main(hackattack.java:43)
Exception in thread "main"

Hier der Source:
Code:
erg = test.replaceAll(temp,"");
System.out.println(erg);
 
R

Roar

Gast
ja blupp... und was ist temp? da steht doch der regex drin!?
 
R

Roar

Gast
öh achja sorry vertan..
bei mir geht folgenes problemlos :-/
String erg = "1234567".replaceAll("123","");
 

Hassbrut

Aktives Mitglied
ARgs hab das Prog seh aberkeine Lösung:

Code:
String erg = test.replaceAll(temp,"target ");
System.out.println(erg);

temp = "xxx (" und dieses "(" führt zum Fehler.

Nur kein Plan wie ändern, da die Klammer drin sein und erstezt werden muss...
 

Wildcard

Top Contributor
Bei einem RegEx musst du Klammern maskieren:

Code:
\(

da aber
Code:
\
wegen Java maskiert werden muss sieht das dann so aus:

Code:
\\(
 

Hassbrut

Aktives Mitglied
Das heisst ich muss temp so initialisieren:

Code:
temp = "xxx \\(";
oder wie?
 

Wildcard

Top Contributor
wenn du jede ( ersetzen willst nur

Code:
String temp = "\\(";

ansonsten ein genaueres Pattern wählen.
 

Hassbrut

Aktives Mitglied
Also es geht darum das mein Programm aus einer txt-Datei Zeile für Zeile String einliesst, die so aufgebaut sind:

"xxx (123.456.789) xxx"

Jetzt soll er Zeile für Zeile halt das "xxx (" durch "target " ersetzen.

da das xxx (hier nur Platzhalter) unterschiedlich groß ist, ist auch der String temp unterschiedlich groß, in den dann "xxx (" reingeschreiben wird. Man weiss ja nicht vorher, wie dieses xxx ( aussieht, fest steht, es ist immer eine "(" als letztes Zeichen. Das bestimmen von temp machen bei mir 2 for-Schleifen. Das klappt ja auch alles.

Nun soll mittels temp halt der obige String ersetz werden durch erg = test.replaceAll(temp,"target ");

Was ja zur besagten Fehlermeldung führt aufgrund der Klammer "(" in temp.


Was genau meinst du mit pattern?
 

Wildcard

Top Contributor
Mal folgendes in der API nachschauen:
- Pattern
- Matcher(insbesondere group)
und dann gleich mal ein in RegEx einlesen.
Dein Pattern wird später etwa so aussehen:

Code:
String regex = ("(.*\\()(temp)(\\).*");
 

The_S

Top Contributor
Ich bin zwar erst Anfänger :oops: aber währe es nicht viel einfacher das Problem mit nem substring zu lösen? Also so würde ich es jetzt spontan versuchen.
 
B

bygones

Gast
Hobbit_Im_Blutrausch hat gesagt.:
Ich bin zwar erst Anfänger :oops: aber währe es nicht viel einfacher das Problem mit nem substring zu lösen? Also so würde ich es jetzt spontan versuchen.
das geht dann, wenn du genau weißt wieviele zeichen die abschneiden musst bzw. wenn der zu behandelnde String immer die gleiche Form hat - und das ist hier scheinbar nicht der Fall
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Stringproblem Java Basics - Anfänger-Themen 12
G Stringproblem Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben