まとめ Javaの標準APIで実現できる。 java.text.BreakIterator.getCharacterInstance() を使用すればよい。 なお、以下の文章における「文字」という語は、「書記素クラスター」(grapheme clusters) を意味している。 要件 Javaの文字列 (UTF-16) を、「一文字ずつ」に分解(分割)したい。 ただし、String#toCharArray() は使用できない。 理由: UTF-16 で扱う文字の中には、単一の char (16ビット) に収まらない文字が存在するため。もし String#toCharArray() を使用してしまうと、一つの文字が 複数の char値 に分断されてしまう。 たとえば、U+20BB7 (𠮷) は一文字だが、格納するためには char型の変数が2つ必要。 char[] u_20bb7_tsuc
![Javaで、文字列を一文字ずつに分解する (サロゲートペアや結合文字を考慮)](https://cdn-ak-scissors.b.st-hatena.com/image/square/9969f4bf5e862846dbc8a4cad51efec75daebfe4/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEhLWyQKuy4AXPNuynzb7IuafudY7vbh-Ynz7rO9KyxrXpY7_rXUamyoPRs_EwYPhn3X5qu_n7pAKW96n-YX4s_b1pCQQv00wHtUe0BzTVl-l9yFzf5BfQTt90X0t66bRTAIzwxOrXAJaZg%2Fw1200-h630-p-k-no-nu%2Fmultiple_combining_character.png)