Mit "pattern", "matcher" und "replace" ein Fragezeichen ersetzen

Scrapy

Mitglied
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:
Exception occurred during event dispatching:
java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
?
^

Meine Funktion ist ziemlich simpel:
Code:
	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...:confused:
 
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 :)
Code:
String s = "abg?asa?s";
s = s.replace('?', ' ').replaceAll(" ", "");
System.out.println(s);
da wo ich die Leerzeichen drin habe müsstest du dein zuerseztzen reinpacken..
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:
s = s.replaceAll("\\?", zuErsetzen);
 
Zuletzt bearbeitet:
elmato hat gesagt.:
Ich verstehe zwar nicht so ganz was du machen möchtest, da dein Matcher nie überprüft ob erfolgreich gemacht wurde,[...]
Also ich möchte "?" und "*" als Joker in einer Sucheabfrage einbauen, so wie man das aus Windows kennt.
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?

elmato hat gesagt.:
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:
 s = s.replaceAll("\\?", zuErsetzen);
Klar kann ich, es geht auch als CharSequence - also String.

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?
Code:
String s = "?asd?*sdfdf*a";
s = s.replaceAll("\\?", "_").replaceAll("\\*", "%");
damit hat sich doch dein Problem erledigt oder stehe och gerade auf dem Schlauch?
mfg
elmato
 
Also ich bekomme bei dem Aufruf wieder folgende Fehlermeldung:
Code:
Exception occurred during event dispatching:
 java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
 ?
 ^
Also sobald ein Fragezeichen in meinem String enthalten ist, kommt diese Fehlermeldung. :confused:
 
Zuletzt bearbeitet:
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 ist
 
Zuletzt bearbeitet:
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... :confused:

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...!
 

Neue Beiträge

Zurück