2010-09-22 2 views
0

У меня есть текст вроде этого.Java Unicode Regular Expression

Every person haveue280 sumue340 ambition 

Я хочу заменить ue280, ue340 к \ ue280 \ ue340 с регулярным выражением

Есть ли решение

Заранее спасибо

ответ

2

Что-то вроде этого?

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"); 

что приводит к

Every person have\ue280 sum\ue340 ambition 

Не уверен, что вы после этого, но, возможно, это что-то вроде этого:

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(); 
} 

(Обновлено в соответствии с axtavt очень хорошей альтернативой . Изготовление CW.)

+0

Он не печатает Юникод ;-( – Novice

+0

Вы имеете в виду вы хотите фактические символы Юникода, а не просто положить '\' перед юникодом нотации? – aioobe

+0

yep. имеет ли это смысл? – Novice

0

Лучше версия обновления 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();