質問: ある特定の長文の文字列を一定バイト数毎に区切りたいのですが、 半角と全角が入り混じっている為単純に特定のバイト数毎に分割してしまうと文字化けを起してしまう可能性があります 何かいい方法はないでしょうか? 以下の例のように出来れば最善なのですが・・・ 例) 長文:あああああああiiiiiiiうううううeeeeeおおおお 4バイト毎に区切る ああ ああ ああ あii iiii iう うう うう eeee eお おお お
回答: まず、文字コードを指定してください。 ShiftJISやEUC-JPなどであれば、例として上がっているような問題が起こりますが、 Javaは、基本的にはUnicode(全部2バイト)で動作しています。 ShiftJISなどである場合、自前で切り出すことになります。 1. 3バイト読み込む(残り3バイトなければ全部)。 2. 次の1バイトが文字コードの第一バイトであれば、その3バイトで文字列を作り、1に戻る。それ以外はつけたした4バイトで文字列を作り、1に戻る。 という感じの操作になるでしょう。 Javaは、可能な限り環境に依存しないようにするために、文字の種類はあまり考えないようにしています。 (そもそも、「全角」「半角」という考え方自体が、環境によっては通用しないので) なので、あえて考えたい場合は、自分で作りこむ必要があります。