【Apex】文字列のバイト数をカウント。SJISで・・
文字列のバイト数をカウントする時は
Blob.valueOf(文字列).size() |
でいけます。ただApexの文字列はUTF-8で扱われるため、全角3バイト、半角1バイトでカウントされます。SJISだと全角は2バイトなので、要件によっては上記で単純にカウントできない。
ではSJIS用に全角を2バイトでカウントしたい場合はどうするか・・とりあえずこんな感じでどうでしょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
String str = 'テスト_001'; // 文字列のbyte数カウント Integer blen = 0; for (Integer i = 0; i < str.length(); i++) { String c = str.substring(i, i + 1); if (Blob.valueOf(c).size() > 1) { blen += 2; } else { blen += 1; } } System.debug('UTF8でバイト数カウント=' + Blob.valueOf(str).size()); System.debug('SJISでバイト数カウント=' + blen); |
処理結果 |
全角と半角の判定を、Blob.size() > 1 でやっているという何とも単純なコードです。なんか考慮漏れがあるような気がしないでもない・・ですが、一応イケるかな。