« 『Canon PIXUS MG3230』を買ってみた… | トップページ | 徒町の『華の舞』で一杯♪ »

2012年12月 6日 (木)

JAVAで半角文字と全角文字の混在で苦しむ…、もしくは1バイト文字と2バイト文字の苦悩…。

JAVAは、どんな文字も1文字として処理をる。

それはそれで、良いのだけれでど…

しかし、日本語は、文字の幅が異なる半角全角混在文がある…。

そんな時に文字の桁を揃えようとして苦労した…。

ので、メモ!

例えば以下のデータを出力したいとする。

String[]    indexList    = {
    "001. 歓迎 xxxxnnn!!",
    "002. 歓迎するかも xxxx!!",
    "003. 歓迎しないかも xxxx!!",
    "004. 歓迎だ! xxxxyy!!",
};
String    name1    = "名前1";
String    name2    = "名前2";

を、こんなすっきりした形で出力したい。

> 001. 歓迎 xxxxnnn!!           : 名前1 : 名前2
> 002. 歓迎するかも xxxx!!      : 名前1 : 名前2
> 003. 歓迎しないかも xxxx!!    : 名前1 : 名前2
> 004. 歓迎だ! xxxxyy!!        : 名前1 : 名前2

でも、「substring」だと、文字数を数えてしまうので…

> 001. 歓迎 xxxxnnn!!             : 名前1 : 名前2
> 002. 歓迎するかも xxxx!!            : 名前1 : 名前2
> 003. 歓迎しないかも xxxx!!           : 名前1 : 名前2
> 004. 歓迎だ! xxxxyy!!            : 名前1 : 名前2

こんな風になってしまう…。(T_T)

その時のプログラムがコレ。

    void sample() {
        int    length    = indexList.length;
        for(int i = 0 ; i < length ; i++ ) {
            String    buffer    = " " + indexList[i] + "                              ";
            System.out.println(buffer.substring(0, 30) +  " : " +name1 + " : " + name2);
        }
    }

で、ゴロゴロと悩む…。

調べてみたら、バイトで文字数を調べられる
メソッドが有るのを知った…。

で、こうなった…。

    void sample() {
        int    length    = indexList.length;
        for(int i = 0 ; i < length ; i++ ) {
            String    buffer    = " " + indexList[i] + "                              ";
            try {
                System.out.println(buffer.substring(0, 30 + buffer.length() - buffer.getBytes("Shift_JIS").length) +  " : " +name1 + " : " + name2);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
    }

無事、当初の目的を達成!

知っていれば、スルーする事かも知れないけれど…

知らないと、ゴロゴロする内容なので…

( ..)φメモメモ

|

« 『Canon PIXUS MG3230』を買ってみた… | トップページ | 徒町の『華の舞』で一杯♪ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/56260697

この記事へのトラックバック一覧です: JAVAで半角文字と全角文字の混在で苦しむ…、もしくは1バイト文字と2バイト文字の苦悩…。:

« 『Canon PIXUS MG3230』を買ってみた… | トップページ | 徒町の『華の舞』で一杯♪ »