Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    86

    inserimento di emoticon

    Ciao, piccola domanda. Supponiamo di avere un Forum, l'utente scrive un messaggio e all'interno di quest'ultimo vi è anche dei caratteri che compongono un'emoticon “”. Alla stampa del messaggio, vorrei visualizzare per esempio l'emoticon che corrisponde a .

    Adesso come dovrei procedere? Dovrei scorrermi l'intera stringa e sostituire i caratteri per esempio con <img src> etc etc?

    Grazie
    Shashia

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: inserimento di emoticon

    Originariamente inviato da Sashias
    Adesso come dovrei procedere? Dovrei scorrermi l'intera stringa e sostituire i caratteri per esempio con <img src> etc etc?
    Sì, esatto. E dovresti farlo nel modo più furbo ed efficiente possibile. Ovvero non cose del tipo, data la stringa, andare a fare N ricerche in loop su tutta la stringa ogni volta per cercare una certa sequenza di un emoticon!

    Potresti usare le espressioni regolari, se le emoticon non sono molte e sopratutto "cablate" (fisse, prestabilite).

    codice:
    import java.util.*;
    import java.util.regex.*;
    
    public class Prova {
        public static void main(String[] args) {
            HashMap<String,String> map = new HashMap<String,String>();
            map.put(":-)", "images/sorriso.gif");
            map.put(";-)", "images/occhiolino.gif");
            map.put(":-(", "images/broncio.gif");
    
            Pattern pattern = Pattern.compile(":-\\)|;-\\)|:-\\(");
    
            String testo = "Ciao :-) questo e` un occhiolino ;-) e questo e` un broncio :-(";
    
            Matcher matcher = pattern.matcher(testo);
    
            StringBuffer buffer = new StringBuffer();
    
            while (matcher.find()) {
                String emoticon = matcher.group();
                String url = map.get(emoticon);
    
                matcher.appendReplacement(buffer, "<img src=\"" + url + "\">");
            }
    
            matcher.appendTail(buffer);
    
            System.out.println(buffer);
        }
    }
    Oppure si potrebbe fare una cosa più sofisticata, ovvero tenere una struttura dati più complessa (direi ad albero) e scansionare carattere per carattere cercando man mano la/e sequenze che corrispondono di più. Esempio: trovo un ':'. A cosa può corrispondere? Solo a :-) e :-( ma non a ;-). Quindi proseguo e trovo un '-', adesso ":-" a cosa può corrispondere? Idem, solo i primi due. Poi trovo ')', ora ":-)" a cosa può corrispondere? Solo al primo! Ed è completo quindi l'ho trovato.

    Ovviamente esiste anche tutta la questione sulla codifica dei caratteri speciali (es. < > ecc...) con le apposite entità. Ma questo è un altro discorso ancora.
    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
    Dec 2009
    Messaggi
    86
    Grazie, credo che usero le espressioni regolari, non le ho mai viste, una guida per studiarle?
    Shashia

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Sashias
    una guida per studiarle?
    Sul tutorial Sun: Regular Expressions
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    86
    Ok thanks
    Shashia

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    86
    Hmm non capisco una cosa,
    se nel tuo codice metto: boolean b=matcher.matches(); non dovrebbe restituirmi vero?
    Shashia

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Sashias
    Hmm non capisco una cosa,
    se nel tuo codice metto: boolean b=matcher.matches(); non dovrebbe restituirmi vero?
    No, matches() non ti serve. matches verifica che l'intero input corrisponda alla regex.
    E non è questo che serve ... anche perché nel mio esempio la regex è fatta per matchare una occorrenza di un emoticon ... non tutto l'input!!
    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.