我有一个字符串,其中包含普通文本和Unicode,例如“abc \ ue415abc”。
我想用\\u
替换所有出现的\u
。我怎样才能做到这一点?
我使用了以下代码,但它无法正常工作。
String s = "aaa\\u2022bbb\\u2014ccc";
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile("\\\\u([0-9A-Fa-f]{4})").matcher(s);
while (m.find()) {
try {
int cp = Integer.parseInt(m.group(1), 16);
m.appendReplacement(buf, "");
buf.appendCodePoint(cp);
} catch (NumberFormatException e) {
}
}
m.appendTail(buf);
s = buf.toString();
请帮忙。提前谢谢。
答案 0 :(得分:3)
来自API参考:http://developer.android.com/reference/java/lang/String.html#replace(java.lang.CharSequence,java.lang.CharSequence)
您可以使用公开
public String replace (CharSequence target, CharSequence replacement)
string = string.replace("\\u", "\u");
or
String replacedString = string.replace("\\u", "\u");
答案 1 :(得分:1)
试试这个:
s = s.replace(s.indexOf("\\u"), "\u");
答案 2 :(得分:1)
String中有contains
方法和replace
方法。那就是说
String hello = "hgjgu\udfgyud\\ushddsjn\hsdfds\\ubjn";
if(hello.contains("\\u"))
hello.replace("\\u","\u");
System.out.println(hello);
将打印: - hgjgu \ udfgyud \ ushddsjn \ hsdfds \ ubjn
答案 3 :(得分:1)
事实上,你的初始字符串没有任何双反斜杠。
String s = "aaa\\u2022bbb\\u2014ccc";
产生一个包含aaa\u2022bbb\u2014ccc
的字符串,因为\\
只是\
的java字符串文字转义。
如果你想要unicode字符:(StackOverflow21028089.java)
import java.util.regex.*;
class StackOverflow21028089 {
public static void main(String[] args) {
String s = "aaa\\u2022bbb\\u2014ccc";
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile("\\\\u([0-9A-Fa-f]{4})").matcher(s);
while (m.find()) {
try {
// see example:
// http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#appendReplacement%28java.lang.StringBuffer,%20java.lang.String%29
int cp = Integer.parseInt(m.group(1), 16);
char[] chars = Character.toChars(cp);
String rep = new String(chars);
System.err.printf("Found %d which means '%s'\n", cp, rep);
m.appendReplacement(buf, rep);
} catch (NumberFormatException e) {
System.err.println("Confused: " + e);
}
}
m.appendTail(buf);
s = buf.toString();
System.out.println(s);
}
}
=>
Found 8226 which means '•'
Found 8212 which means '—'
aaa•bbb—ccc
如果你想要aaa\u2022bbb\u2014ccc
,那就是你的开始。如果您打算以aaa\\u2022bbb\\u2014ccc
开头的字符串文字,那就是:
String s = "aaa\\\\u2022bbb\\\\u2014ccc";
并将其转换为带有单斜线的那个可以像@Overv的代码一样简单:
s = s.replaceAll("\\\\u", "\\u");
虽然反斜杠在正则表达式模式中有特殊含义和替换(参见Matcher's docs)(除了java解析),这应该是:
s = s.replaceAll("\\\\\\\\u", "\\\\u");
=>
aaa\u2022bbb\u2014ccc