Salesforceでの半角・全角の変換について、色々と調べたのでまとめておきます。
#既存情報で見つけた手法
少し古い記事ですが、下記リンクの記事でMapを使用して、半角→全角、全角→全角の変換を行うメソッドが紹介されていました。
https://salesforce.oikeru.com/entry/to_full_width
このコードをコピペすれば簡単にできるのですが、あまりスッキリとした感じではないので、もっとコンパクトにまとまらないかなとその他の情報を調べてみました。
#結論
Unicodeのコードポイントを利用した下記のメソッドで半角・全角の変換が出来ました。
public class ReplaceChar {
/** 半角アルファベットを全角アルファベットに変換するメソッド */
public static String repleceAlphabetHalfToFull(String str) {
List<Integer> codePointList = new List<Integer>();
for (integer i = 0; i < str.length(); i++) {
// 文字のコードポイント取得
Integer codePoint = str.codePointAt(i);
if (65 <= codePoint && codePoint <= 90) {
// 半角アルファベット大文字は全角大文字に変換してリストに追加
codePoint += 65248;
codePointList.add(codePoint);
} else if (97 <= codePoint && codePoint <= 122) {
// 半角アルファベット小文字は全角小文字に変換してリストに追加
codePoint += 65248;
codePointList.add(codePoint);
} else {
// 半角アルファベット以外はそのままリストに追加
codePointList.add(codePoint);
}
}
return String.fromCharArray(codePointList);
}
}
上記メソッドで半角→全角の変換ができます。
全角→全角の変換はコードポイントの範囲を変更して、65248を引くだけで行えます。
Mapを作るメソッドよりはスッキリした作りだと思います。
また、半角・全角のアルファベットだけでなく数字や記号にも柔軟に対応できそうです。
Salesforceにおいて、全角・半角の変換は使用画面が限れれると思いますが、必要であればぜひ使用してみてください。
#おまけ
###Salesforceにおける半角・全角の取り扱いについて
Salesforceでは、SOQLやApexによってアルファベットの小文字/大文字、半角/全角などの取り扱いが違います。
詳しいことは下記リンクを参考に。
[リンク]https://www.terrasky.co.jp/blog/2014/140204_001333.php
一例を上げると、Mapのgetメソッドやcontainskeyメソッドでは全角と半角が区別されるため、Map内のキーと引数で渡す値が一致しない場合、期待した値が取り出せません。
###どんな場面で使用するか
Salesforceでは、各項目に入力される値は柔軟に制限できるため、入力の際に半角に制限するなどシステムの設計をしておけば上記のメソッドは必要ないと思います。
しかし、要件次第ではそのような設計ができなかったり、すでに入力されたデータがあって一致していない場合などに、このメソッドを使用するだけで入力された値に関係なく処理を行えるので、そのようなときに使用できるのではないかと思います。