views:

139

answers:

2

What it the java equivalent of javascript's:

String.fromCharCode(n1, n2, ..., nX)

http://www.w3schools.com/jsref/jsref_fromCharCode.asp

+1  A: 

new String(new char[]{n1, n2, ..., nX}) works, if I understand what you're asking.

Vuntic
+4  A: 

That would be something like as follows:

public static String fromCharCode(int... codePoints) {
    StringBuilder builder = new StringBuilder(codePoints.length);
    for (int codePoint : codePoints) {
        builder.append(Character.toChars(codePoint));
    }
    return builder.toString();
}

Note that casting to char isn't guaranteed to work because the codepoint value might exceed the upper limit of char (65535). The char was established in the dark Java ages when Unicode 3.1 wasn't out yet which goes beyond 65535 characters.

Update: the String has actually a constructor taking an int[] (introduced since Java 1.5, didn't knew it from top of head), which handles this issue correctly. The above could be simplified as follows:

public static String fromCharCode(int... codePoints) {
    return new String(codePoints, 0, codePoints.length);
}
BalusC
+1 for Unicode perfection, but I doubt the Javascript function can correctly handle codepoints bigger than 65536.
GregS
This appears to work for most values. I am trying:new String(new int[]{141}, 0, 1) which in javascript prints, "?" but in java does not. Is 141 invalid? I am trying to debug some obfuscation code I ported from Javascript to Java and am getting inconsistent results for some characters.
jon077
That's dependent on the character encoding which is a completely different story. The JS environment is apparenly using a different character encoding than Java environment. At least, the above should work flawlessly for an Unicode character encoding like UTF-8.
BalusC