|
|||||||||||||||||||||||||||||||||||||||||||||||||||
2012 2010 2009 2008 2007 |
February 1, 2012. Javaにおける固定長文字列作成について Javaをやってて意外に困るのが固定長切り出し処理。業務用アプリ開発なんかだと、IFデータとして固定長ファイルの読み書きが必要なことは多いのだが、Javaでこれを実現しようとすると意外に手間取る事になる。 getLength()やsubstring()では事足りないってのは誰でも知ってる。半角文字も全角文字も同じ一文字にカウントされるからだ。なので、VBなんかだとMidB()とかを使うのだが、2byte文字が混じってると半分に切れちゃったりするから、結局1文字ずつMidした結果をLenBして固定長文字列を作る。 Javaでも同じような手順が必要だが単純にgetBytes()するとうまくいかない。なぜならJavaの内部コードはUTF-16であり、getBytes().lengthでちょっと以外な数値が返ってきてしまうからだ。 なので、getBytes()の際にクライアント環境の文字コードを指定する。サンプルは以下。この手法は『ある幅に印刷可能な部分文字列』なんかを取得する際にも応用できる。固定幅フォント限定だが、携帯ゲーム作成時など、Graphicsクラスを経由しないので手軽である。
public String utfFix(String str, int length) throws Exception { String ENC = "Windows-31J"; int index = 0; StringBuffer buf = new StringBuffer();
for (int i = 0; i < str.length(); i++) { String s = str.substring(i, i + 1); int len = s.getBytes(ENC).length;
if (index + len <= length) { buf.append(s); index += len; } else { break; } }
for (int i = 0; i < length - index; i++) { buf.append(" "); }
return buf.toString(); } ※パスにはこの日記のタイトルをコピペして下さい。 Copyright 2012 barista. All rights reserved. |
|