The Basic Multilingual Plane (BMP) contains Unicode code points from U+0000 through U+FFFF. Java char values cover this range, but a displayed character outside it requires a surrogate pair, so one character may occupy two chars. section 6.1
The char-counting mistake
Splitting a string with substring or processing it char by char can divide an emoji's surrogate pair. The result may display a placeholder character. Combining characters create a second failure: a base symbol and modifier can remain separately valid while losing their intended appearance. section 6.1
