What is the "correct" way of comparing a code-point to a Java character? For example:
int codepoint = String.codePointAt(0); char token = '\n';
I know I can probably do:
if (codepoint==(int) token) { ... }
but this code looks fragile. Is there a formal API method for comparing codepoints
to chars
, or converting the char
up to a codepoint
for comparison?
A char is not an object, so you can use equals() like you do for strings.
A Unicode code point is a unique number assigned to each Unicode character (which is either a character or a grapheme). Unfortunately, the Unicode rules allow some juxtaposed graphemes to be interpreted as other graphemes that already have their own code points (precomposed forms).
Java String codePointAt() Method The codePointAt() method returns the Unicode value of the character at the specified index in a string. The index of the first character is 0, the second character is 1, and so on.
A little bit of background: When Java appeared in 1995, the char
type was based on the original "Unicode 88" specification, which was limited to 16 bits. A year later, when Unicode 2.0 was implemented, the concept of surrogate characters was introduced to go beyond the 16 bit limit.
Java internally represents all String
s in UTF-16 format. For code points exceeding U+FFFF the code point is represented by a surrogate pair, i.e., two char
s with the first being the high-surrogates code unit, (in the range \uD800-\uDBFF), the second being the low-surrogate code unit (in the range \uDC00-\uDFFF).
From the early days, all basic Character
methods were based on the assumption that a code point could be represented in one char
, so that's what the method signatures look like. I guess to preserve backward compatibility that was not changed when Unicode 2.0 came around and caution is needed when dealing with them. To quote from the Java documentation:
Casting the char
to an int
, as you do in your sample, works fine though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With