繁体   English   中英

用Java字符串中的\\ u替换\\\\ u

[英]Replacing \\u by \u in java string

我有一个包含普通文本和Unicode之间的字符串,例如“ abc \\ ue415abc”。 我想用\\u\u003c/code>替换所有出现的\\\\u\u003c/code> \\u\u003c/code> 。 我该如何实现? 我使用了以下代码,但无法正常工作。

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

请帮忙。 提前致谢。

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

尝试这个:

s = s.replace(s.indexOf("\\u"), "\u");

String中contains一个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

实际上,您的初始字符串没有任何双反斜杠。

String s = "aaa\\u2022bbb\\u2014ccc";

产生一个包含aaa\•bbb\—ccc的字符串,因为\\\\只是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\•bbb\—ccc ,那就是您的开始。 如果您要以aaa\\\•bbb\\\—ccc字符串文字aaa\\\•bbb\\\—ccc ,那就是:

String s = "aaa\\\\u2022bbb\\\\u2014ccc";

并将其转换为一个单斜杠就可以像@Overv的代码一样简单:

s = s.replaceAll("\\\\u", "\\u");

尽管由于反斜杠在正则表达式模式替换中具有特殊含义(请参阅Matcher的docs )(除了Java解析),它可能应该是:

s = s.replaceAll("\\\\\\\\u", "\\\\u");

=>

aaa\u2022bbb\u2014ccc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM