ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
20618
20618
EMPFEHLEN
-
Wie kann man mit "pattern", "matcher" und "replace" ein Fragezeichen ersetzen?
Ziel ist eine variable Suchfunktion, wie in Windows: "M?ller".
Leider bekomme ich bei meiner Methode immer den Fehler:
Code :1 2 3 4
Exception occurred during event dispatching: java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0 ? ^
Meine Funktion ist ziemlich simpel:
Code :1 2 3 4 5 6 7 8 9 10 11 12
public String ersetzte(String strZeichen, String strZuSuchen, String strZuErsetzten) { if(strZeichen.indexOf(strZuSuchen) > 0) { Pattern pattern = Pattern.compile(strZuSuchen); Matcher matcher = pattern.matcher(strZeichen); return matcher.replaceAll(strZuErsetzten); } return strZeichen; }
Ich kann das Fragezeichen auch leider nicht mit "\?" ersetzen oder so...
-
Ich verstehe zwar nicht so ganz was du machen möchtest, da dein Matcher nie überprüft ob erfolgreich gemacht wurde, aber evt. hilft dir dieses Code Fragment weiter

da wo ich die Leerzeichen drin habe müsstest du dein zuerseztzen reinpacken..Code :1 2 3
String s = "abg?asa?s"; s = s.replace('?', ' ').replaceAll(" ", ""); System.out.println(s);
mfg
elmato
//edit
Kommando zurück :| du kannst deinen String bei replace garnicht beutzen da er einen char verlangt, hmm ich überleg mir was anderes..
War doch mal wieder einfacher als gedacht
Code :1
s = s.replaceAll("\\?", zuErsetzen);Geändert von elmato (01.12.05 um 13:11 Uhr)
-
Also ich möchte "?" und "*" als Joker in einer Sucheabfrage einbauen, so wie man das aus Windows kennt.
Zitat von elmato
Diese Zeichen muß ich dann für die Datenbankabfrage aber ändern, d.h.: "?" in "_" und "*" in "%", sonst weiß die Datenbank damit nichts anzufangen.
Meinst du ich muß da vorher noch etwas abfragen?
Klar kann ich, es geht auch als CharSequence - also String.
Zitat von elmato
Mein Quelltext funktioniert auch so - nur meldet er den Fehler, wenn ein "?"-Fragezeichen in meinem String vorkommt.
Alle anderen normalen Eingaben die ersetzt werden sollen, werden tadellos übersetzt.
-
Warum benutzt du dann nicht replaceAll bevor du eine Anfrage an die DB schickst?
damit hat sich doch dein Problem erledigt oder stehe och gerade auf dem Schlauch?Code :1 2
String s = "?asd?*sdfdf*a"; s = s.replaceAll("\\?", "_").replaceAll("\\*", "%");
mfg
elmato
-
Also ich bekomme bei dem Aufruf wieder folgende Fehlermeldung:
Also sobald ein Fragezeichen in meinem String enthalten ist, kommt diese Fehlermeldung.Code :1 2 3 4
Exception occurred during event dispatching: java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0 ? ^
Geändert von Scrapy (01.12.05 um 15:56 Uhr)
-
Ja aber du brauchst diese Funktion von dir doch garnich! Wozu? Lass die Pattern und Matcher weg, und arbeite mit replaceAll, so wie oben beschrieben, da du in deiner Funktion sowieso nichts mit dem Matcher machst ist das alles überflüssig, oder habe ich immer noch nicht Verstanden was du gerne machen möchtest? Du Hast ein paar Strings mit ? und * und möchtest diese umwandeln?
//edit
Und wenn du umbedingt mit Pattern und Matcher arbeiten möchtest dann musst du halt deinen string zuSuchen mit replaceAll("\\?", "\\\\?") bearbeiten, dann sollte er nicht mehr meckern, da das ? dann richtig escaped istGeändert von elmato (01.12.05 um 16:22 Uhr)
-
Also ich hatte jetzt nur das replaceAll(...) genommen und dabei habe ich die Fehlermeldung bekommen. - Also ich will das mit dem Pattern und Matcher nicht unbedingt benutzen - ich dachte am Anfang eben nur, dass das nur damit geht.

Allerdings arbeitet EinString.replaceAll(...) mit Pattern und Matcher - so stehts zumindest in der Java-API!
Nochmal zu meiner Frage:
Ja, ich haben einen String mit Zeichen und es können dort "?"-Fragezeichen und "*"-Sternchen auftauchen, die als Widgets dienen.
Diese möchte ich über eine Funktion einfach zu "_" bzw. "%" ersetzen.
Leider klappt das nicht und ich bekomme immer die oben genannte Fehlermeldung, wenn ich ein "?"-Fragezeichen in meinem String habe.
Beispiel-String: "M?ier" sollte zu: "M_ier" ersetzt werden,
oder: "Am Abend leuchten die *" sollte zu: "Am Abend leuchten die %" ersetzt werden.
Zum "Escapen":
Nun gut wenn ich also den String: "Ab?defg*" habe und ich das "?"-Fragezeichen "escapen" will, da bräuchte ich ja auch eine Funktion, die "Ab?defg*" in "Ab\?defg*" umwandelt, oder?
Ich dachte da an: MeinString.replaceAll("?", "\\?")
Aber es funktioniert leider so nicht...
Okay, ich kann das auch mit einer "while"-Schleife alles raussuchen... - aber ich wollte eben die internen Funktionen nutzen!
-
Klar arbeitet replaceAll intern mit RegEx

schreib doch mal replaceAll("\\?", "_") du brauchst zwei backslashes nicht nuir einen, dann geht es(zumindest bei mir..)
mfg
elmato
-
Dank' dir! Hast recht!

Ich habe bei "*"-Sternchen kein "\\*" davorgesetzt!
Und ich hab' eben nur den Fehler überflogen...!
Ähnliche Themen
-
Richtige Syntax bei Operatorüberladung, wann sind "friend", "const", "&" nötig?
Von mrs_schokokeks im Forum C/C++Antworten: 4Letzter Beitrag: 25.08.10, 19:13 -
Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
Von MTMonline im Forum Videoschnitt, Videotechnik & -produktionAntworten: 2Letzter Beitrag: 25.04.08, 09:49 -
replace("%20"," ") wird nicht erkannt
Von marlone_de im Forum JavaAntworten: 7Letzter Beitrag: 09.11.06, 09:49 -
Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 27.05.05, 15:29 -
Datei-Eigenschaften: "erstellt:","Geändert am", "Letzter Zugriff:"
Von KILLSMAKER im Forum C/C++Antworten: 2Letzter Beitrag: 19.05.05, 19:51





Zitieren
Login




