leftBytes
文字から指定したバイト数の文字を切り出す。
マルチバイト文字の途中のバイトでは切らない。
System.out.println(leftBytes("あいうえお", 3));
=> "あ"
public static String leftBytes(String text, int bytes) { // file.encodingというプロパティは環境によっては使えない可能性がある。 // System#getProperties()のjavadocにあるシステムプロパティの一覧には記載がないのだ。 // ただ、InputStreamReaderのデフォルトコンストラクタはこれを使ってエンコードを決めているのでそれに倣った。 // sunの実装vmであれば問題ないはず。 return leftBytes(text, bytes, System.getProperty("file.encoding")); } public static String leftBytes(String text, int bytes, String charset) { CharBuffer src = CharBuffer.wrap(text.toCharArray()); Charset.forName(charset).newEncoder().encode(src, ByteBuffer.allocate(bytes), true); return src.flip().toString(); }
いろいろぐぐってみると下記のようなコードを見かけるが、flush()の必然性がわからない。
ステップ実行で処理を追ってみても何もしてない気がするが・・・
CharsetEncoder encoder = Charset.forName(charset).newEncoder(); ByteBuffer buffer = ByteBuffer.allocate(bytes); CoderResult result = encoder.encode(src, buffer, true); if (result.isUnderFlow()) { encoder.flush(buffer); } return src.flip().toString();