Help us understand the problem. What is going on with this article?

Salesforceで全角・半角の変換メソッド

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では、各項目に入力される値は柔軟に制限できるため、入力の際に半角に制限するなどシステムの設計をしておけば上記のメソッドは必要ないと思います。
 しかし、要件次第ではそのような設計ができなかったり、すでに入力されたデータがあって一致していない場合などに、このメソッドを使用するだけで入力された値に関係なく処理を行えるので、そのようなときに使用できるのではないかと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away