縦書きで宛名を印刷する場合などのために、英数記号を半角から全角に変換するプログラムを書きました。たとえば、半角アルファベットのEはHANKAKU文字列の5番目に出てきますが、han2zenメソッドではこの文字をZENKAKU文字列の5番目にある全角のEに置き換えます。
同じ方法を使って、ひらがなとカタカナの変換などもできそうです。ただ、カタカナの「ヴ」に相当する文字がひらがなには無いので、この文字だけは別途の処理が必要になります。
package jp.veltec.util;
public class TextConvertor{
static final String HANKAKU
="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+"0123456789!¥"#$%&'()*+,-./:;<=>?@[¥¥]^_`{|}~。、・「」";
static final String ZENKAKU
="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+"abcdefghijklmnopqrstuvwxyz"
+"0123456789!”#$%&’()*+,−./:;"
+"<=>?@[¥]^_`{|}〜。、・「」";
public static String han2zen(String aString){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < aString.length(); i++) {
char c = aString.charAt(i);
int p = HANKAKU.indexOf(c);
if(p==-1){
sb.append(c);
}else{
sb.append(ZENKAKU.charAt(p));
}
}
return sb.toString();
}
public static String zen2han(String aString){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < aString.length(); i++) {
char c = aString.charAt(i);
int p = ZENKAKU.indexOf(c);
if(p==-1){
sb.append(c);
}else{
sb.append(HANKAKU.charAt(p));
}
}
return sb.toString();
}
}
かならずしも効率のよい方法ではないかもしれませんが、この方法のメリットは置き換える文字のペアを簡単に定義できることです。上の例で半角のマイナスを全角のダッシュに置き換えることができます。全角のマイナス記号は縦書きでも横棒として表示されてしまいますが、ダッシュは(縦書きに対応しているフォントやプログラムを使えば)縦棒として表示されます。public class TextConvertor{
static final String HANKAKU
="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+"0123456789!¥"#$%&'()*+,-./:;<=>?@[¥¥]^_`{|}~。、・「」";
static final String ZENKAKU
="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+"abcdefghijklmnopqrstuvwxyz"
+"0123456789!”#$%&’()*+,−./:;"
+"<=>?@[¥]^_`{|}〜。、・「」";
public static String han2zen(String aString){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < aString.length(); i++) {
char c = aString.charAt(i);
int p = HANKAKU.indexOf(c);
if(p==-1){
sb.append(c);
}else{
sb.append(ZENKAKU.charAt(p));
}
}
return sb.toString();
}
public static String zen2han(String aString){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < aString.length(); i++) {
char c = aString.charAt(i);
int p = ZENKAKU.indexOf(c);
if(p==-1){
sb.append(c);
}else{
sb.append(HANKAKU.charAt(p));
}
}
return sb.toString();
}
}
同じ方法を使って、ひらがなとカタカナの変換などもできそうです。ただ、カタカナの「ヴ」に相当する文字がひらがなには無いので、この文字だけは別途の処理が必要になります。
投稿:竹形 誠司[takegata]/2011年 05月 08日 02時 39分
/更新:2011年 05月 08日 03時 00分