2010-09-22 3 views
0

J'ai un texte comme celui-ci.Java Unicode Regular Expression

Every person haveue280 sumue340 ambition 

Je veux remplacer ue280, ue340 à \ ue280, \ ue340 avec l'expression régulière

est-il une solution

Merci à l'avance

Répondre

2

Quelque chose comme ça?

String s = "Every person haveue280 sumue340 ambition"; 

// Put a backslash in front of all all "u" followed by 4 hexadecimal digits 
s = s.replaceAll("u\\p{XDigit}{4}", "\\\\$0"); 

qui se traduit par

Every person have\ue280 sum\ue340 ambition 

Je ne sais pas ce que vous êtes après, mais peut-être c'est quelque chose comme ceci:

static String toUnicode(String s) { 
    Matcher m = Pattern.compile("u(\\p{XDigit}{4})").matcher(s); 
    StringBuffer buf = new StringBuffer(); 
    while(m.find()) 
     m.appendReplacement(buf, "" + (char) Integer.parseInt(m.group(1), 16)); 
    m.appendTail(buf); 
    return buf.toString(); 
} 

(Mise à jour selon axtavt alternative très agréable Faire CW.)

+0

Il n'imprime pas unicode ;-( – Novice

+0

Vous voulez dire que vous voulez que les caractères unicode réels, non seulement mettre '\' en face de la notation unicode? – aioobe

+0

oui. Est-ce que ça fait du sens? – Novice

0

meilleure version de la mise à jour aioobe:

String in = "Every person haveue280 sumue340 ambition"; 

Pattern p = Pattern.compile("u(\\p{XDigit}{4})"); 
Matcher m = p.matcher(in); 
StringBuffer buf = new StringBuffer(); 
while(m.find()) 
    m.appendReplacement(buf, "" + (char) Integer.parseInt(m.group(1), 16)); 
m.appendTail(buf); 
String out = buf.toString();