Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142

    Eliminare carattere in stringa e problemi con codifica

    Per rimuovere un carattere da una stringa mi ero affidato ad un trucco trovato nel web, cioè:

    codice:
    String s = "A tshI VVuLp";
    s = s.replace( 'h', '\0');
    A causa di ciò mi sono ritrovato in una situazione assurda: il codice sembrava non funzionare all'interno di un progetto Eclipse, ma funzionava in un piccolo file eseguito da terminale!

    Dopo credo almeno 1 ora di mi è venuto in mente che il problema stava nella codifica! E infatti il carattere '\0' non è semplicemente "nessun carattere" come pensavo/speravo, ma è proprio un '\0' che da risultati strani:
    - Nella console di Eclipse non solo non viene visualizzato, ma mi azzera anche qualunque carattere che lo segue!
    - Nel terminale Linux non viene visualizzato
    - Su gedit mi da errore sia con utf8 che con iso (occidentale)

    In conclusione chiedo a voi se c'è qualche modo veloce (sia in termini di scrittura che di efficienza del codice) per fare la rimozione di un singolo carattere in maniera corretta, oppure devo affidarmi a qualche StringBuilder ed ad una iterazione sulla stringa iniziale.

    P.S. Ho provato con replaceAll("h", ""), e sembra funzionare, ma vorrei qualche certezza in più. Le codifiche saranno per sempre la mia condanna, che si tratti di Java, LaTeX o qualunque cosa

    Ciao!
    <esistono cose che non esistono>

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,283
    Quote Originariamente inviata da Pete Visualizza il messaggio
    Per rimuovere un carattere da una stringa mi ero affidato ad un trucco trovato nel web, cioè:

    codice:
    String s = "A tshI VVuLp";
    s = s.replace( 'h', '\0');
    Così non rimuovi ... sostituisci con il carattere nullo. Il che è (al 99,99%) peggio.

    Quote Originariamente inviata da Pete Visualizza il messaggio
    P.S. Ho provato con replaceAll("h", ""), e sembra funzionare
    Sì, funziona. Nota però che replaceAll sfrutta le "espressioni regolari", dove certi caratteri hanno significati particolari. Ora "h" non è speciale nelle regex, vuol dire proprio "match con la lettera h".

    Se la stringa da cercare dovesse essere arbitraria (cioè non la scrivi tu nel codice), usa il
    String replace(CharSequence target, CharSequence replacement)
    che è disponibile da Java 5. Questo non usa le regex.

    Se la stringa la scrivi tu nel codice, usa pure replaceAll ma documentati sulle regex per scrivere correttamente l'espressione se intendi usare caratteri es. + * [ (e altri) che sono "speciali".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Così non rimuovi ... sostituisci con il carattere nullo. Il che è (al 99,99%) peggio.


    Sì, funziona. Nota però che replaceAll sfrutta le "espressioni regolari", dove certi caratteri hanno significati particolari. Ora "h" non è speciale nelle regex, vuol dire proprio "match con la lettera h".

    Se la stringa da cercare dovesse essere arbitraria (cioè non la scrivi tu nel codice), usa il
    String replace(CharSequence target, CharSequence replacement)
    che è disponibile da Java 5. Questo non usa le regex.

    Se la stringa la scrivi tu nel codice, usa pure replaceAll ma documentati sulle regex per scrivere correttamente l'espressione se intendi usare caratteri es. + * [ (e altri) che sono "speciali".

    In realtà devo sostituire singoli caratteri in una stringa che ne può contenere al massimo 4.
    Ora sto pensando che il replaceAll fa sicuramente un'iterazione su tutta la stringa ed io potrei doverne chiamare anche + di uno in successione, quindi forse mi conviene utilizzare la coppia StringBuilder+ciclo_fatto_da_me. A ben vedere, però, anche se ho ragione la differenza sarà assolutamente trascurabile.

    Grazie!
    Ciao
    <esistono cose che non esistono>

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,283
    Quote Originariamente inviata da Pete Visualizza il messaggio
    In realtà devo sostituire singoli caratteri in una stringa che ne può contenere al massimo 4.
    Ora sto pensando che il replaceAll fa sicuramente un'iterazione su tutta la stringa ed io potrei doverne chiamare anche + di uno in successione
    Se devi sostituire più caratteri differenti (e noti a priori) con niente (=eliminarli) una regex può farlo.

    codice:
    s = s.replaceAll("a|b", "");

    Vuol dire "a" oppure "b" (nelle regex pippo|pluto vuol dire "pippo" oppure "pluto")
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.