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.