Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace \\u by \u in Java String

I have a string of the format:

"aaa\\u2022bbb\\u2014ccc"

I'd like to display the two special charactes, but to be able to do that, I have to first convert the string to this format:

"aaa\u2022bbb\u2014ccc"

I've tried writing this, but it gives a compilation error:

String encodedInput = input.replace("\\u", "\u");

This has got to be something straightforward, but I just cannot get it. Any ideas?

like image 271
OceanBlue Avatar asked May 23 '26 04:05

OceanBlue


2 Answers

Unfortunately I do not know of a sort of eval.

    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();
like image 160
Joop Eggen Avatar answered May 25 '26 18:05

Joop Eggen


In addition to escaping your escapes -- as other people (e.g. barsju) have pointed out -- you must also consider that the usual conversion of the \uNNNN notation to an actual Unicode character is done by the Java compiler at compile-time.

So even once you sort out the backslash escaping issue, you may very well have have further trouble getting the actual Unicode character to display because you appear to be manipulating the string at run-time, not at compile-time.

This answer provides a method to replace \uNNNN escape sequences in a run-time string with the actual corresponding Unicode characters. Note that the method has some TODOs left with regard to error handling, bounds checking, and unexpected input.

(Edit: I think the regex-based solutions provided here by e.g. dash1e would be better than the method I linked, as they are more polished with regards to handling unexpected input data).

like image 35
Mike Clark Avatar answered May 25 '26 18:05

Mike Clark



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!