Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867

    [java] metodo String.replaceAll

    Ciao a tutti,
    vi espongo il mio problema brevemente e spero chiaramente:

    Io ho bisogno di rimpiazzare all'interno di una stringa tutte le occorrenze di una sequenza di carateri con un'altra sequenza.
    Per fare questo ho riscontrato un problema in determinati casi, infatti il metodo replaceAll considera le parentesi quadrate ed altri caratteri come caratteri speciali, mi spiego meglio con un esempio.

    Supponiamo di avere una stringa:
    String a = "[a]a"

    se io ho bisogno di sostiutire "[a]" con una parola a caso ad esempio "prova" chiamo la funzione a.replaceAll("[a]","prova")
    in questo caso pero' la stringa "[a]" viene interpretata come una regular expression e quindi invece di restituirmi "provaa" mi restituisce "[prova]prova" andando a sostuire ogni occorrenza di "a" con "prova".

    Come posso fare a fare la sostituzione nel modo che desidero io? Posso usare replaceAll formattando il primo parametro in modo da usarla come desidero io? Oppure devo riscrivermi io un metodo per fare la sostituzione a mio piacimento?

    Se non mi sono spiegato bene chiedetemi chiarimenti.

    Spero qualcuno mi aiuti.

    Ciao a tutti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Credo che si possa fare anche usando bene le espressioni regolari, ma io, sinceramente, non ho nessuna confidenza con esse. Fossi in te mi riscriverei un metodo... ci metterei molto meno tempo!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    Lo immaginavo che mi avreste risposto cosi'
    Penso che mi scrivero' il metodo per rimpiazzare le stringhe, mi chiedo pero' se qualcuno abbia voglia di spiegarmi come potrei usare le espressioni regolari in questo caso, puo' sempre essere utile in futuro ... no?

    In ogni caso grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867

  5. #5
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    413
    le regexp hanno la stessa sintassi dellle regexp perl.. non è assolutamente difficile usarle...


    prova a passare la "a" come oggetto regexp e non come stringa

  6. #6
    Credo che tu debba usare lo "\" per la quotatura. In pratica utilizza come regexp "\[a\]". Prova e fammi sapere.
    ciao ciao !!
    _______________
    home : cristianolongo.altervista.org
    e-mail : cristiano_longo@yahoo.it

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da cristiano_longo
    Credo che tu debba usare lo "\" per la quotatura. In pratica utilizza come regexp "\[a\]". Prova e fammi sapere.
    Avevo già provato io, ma non funziona: dice "illegal escape character"...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    esatto, ho provato anche io....

    se cerco di inserire nella stringa \[ mi dice illegal escape character ed in effetti ha ragione..... perche' \[ non e' un carattere speciale.

    Non credevo che questo problema fosse cosi' insuperabile....

  9. #9
    Ho visto i sorgenti di una cosa che ho fatto io. Prova con
    "\\[a\\[". Se funziona ti spiego cosa e' successo.
    ciao ciao !!
    _______________
    home : cristianolongo.altervista.org
    e-mail : cristiano_longo@yahoo.it

  10. #10
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    413
    no no... :gren:

    te lo spiego io:

    allora: non ho molto tempo ma te la spiego alla buona, sempre meglio di niente ..



    se usi le jdk 1.3 inizia scaricandoti il jar di jakarta oro, io per esempio uso le jdk 1.3 e le regexp non le supporta.
    sulle 1.4.1 c'è il supporto ed il metodo è comune, quasi uguale salvo che per i nomi degli oggetti.

    Per effettuare operazioni su stringhe con le regexp devi innanzitutto costruire un pattern, compilarlo (e qui vedere se ci sono errori..) e applicarlo per esempio con un matcher o con un apposito metodo di string.

    Pattern pattern = Pattern.compile(ILTUOPATTERN);


    il tuo pattern deve rispettare, come dicevo prima , la sintassi delle REGEXP perl, e nel tuo caso, "[\\[a\\[]" indica la stringa vera e propria "[a]".


    una volta ottenuto il pattern, hai bisogno o di un matcher per effettuare le ricerche oppure poi usarlo, appunto, per replaceAll e metodi simili.

    se ti serve un matcher, fai così:

    Matcher matcher = pattern.matcher(LA_TUA_STRINGA_DOVE_EFFETTUARE_LA_ RICERCA);

    e poi testi il match con matcer.match() (booleano)

    per il replaceAll credo che lo capisca da solo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.