tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
20618
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Scrapy Scrapy ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Erde
    Beiträge
    79
    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...
     

  2. #2
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    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 :
    1
    2
    3
    
    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 :
    1
    
    s = s.replaceAll("\\?", zuErsetzen);
    Geändert von elmato (01.12.05 um 13:11 Uhr)
     

  3. #3
    Scrapy Scrapy ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Erde
    Beiträge
    79
    Zitat Zitat von elmato
    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?

    Zitat Zitat von elmato
    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);
    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.
     

  4. #4
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    Warum benutzt du dann nicht replaceAll bevor du eine Anfrage an die DB schickst?
    Code :
    1
    2
    
    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
     

  5. #5
    Scrapy Scrapy ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Erde
    Beiträge
    79
    Also ich bekomme bei dem Aufruf wieder folgende Fehlermeldung:
    Code :
    1
    2
    3
    4
    
    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.
    Geändert von Scrapy (01.12.05 um 15:56 Uhr)
     

  6. #6
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    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
    Geändert von elmato (01.12.05 um 16:22 Uhr)
     

  7. #7
    Scrapy Scrapy ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Erde
    Beiträge
    79
    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!
     

  8. #8
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    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
     

  9. #9
    Scrapy Scrapy ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Erde
    Beiträge
    79
    Dank' dir! Hast recht!

    Ich habe bei "*"-Sternchen kein "\\*" davorgesetzt!
    Und ich hab' eben nur den Fehler überflogen...!
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  3. replace("%20"," ") wird nicht erkannt
    Von marlone_de im Forum Java
    Antworten: 7
    Letzter Beitrag: 09.11.06, 09:49
  4. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29
  5. Antworten: 2
    Letzter Beitrag: 19.05.05, 19:51