ICU4Jを使う

半角を全角にするライブラリがないか探していたらICU4Jというライブラリを見つけたので使ってみる。

まずは以下のサイトからダウンロードする。
IBM - Japan


で、以下のJarをクラスパスへ含める。
icu4j-3_6.jar
icu4j-charsets-3_6.jar
xliff-3_6.jar


Sample

package learning.icu4j;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.ibm.icu.text.Transliterator;

public class HalfToFull {

	public static void main(String[] args) {
		Transliterator tr = Transliterator.getInstance("Halfwidth-Fullwidth");
		String result = tr.transliterate("123, % &-/*&'\" ");

		// ユニコード(\\uxxxx)が含まれる場合がある為、置き換える
		Pattern pattern = Pattern.compile("\\\\u[0-9][0-9][0-9][0-9]");
		Matcher matcher = pattern.matcher(result);

		// マッチする文字列を含む限り繰り返す
		while (matcher.find()) {
			// 指定したグループの数だけ繰り返す
			for (int i = 0; i <= matcher.groupCount(); i++) {
				String character = matcher.group(i);
				result = result.replace(character, 
						String.valueOf((char) Integer.parseInt(character.substring(2, 6), 16)));
			}
		}
		
		System.out.println(result);
	}

}


半角スペースが全角スペースではなく、「\u3000」に置き換わってしまう為、「\u3000」を全角スペースにさらに置き換えてます。