Memos About Salesforce

Salesforceにハマってたこと!

SFDC APEX 文字列 全角変換

コーディングで、カナ、ひらがな、英数字

を全角に変換する必要な時があるでしょう

今回、全角変換について

共有したいと思います。

欲しけりゃくれてやる・・・。

探せ!

この世の全てをそこに置いてきた〜笑

目次

全角変換をするには、シンプルな方法:マッピングを作成する

やっぱり、シンプルには、自分で作成することかなと思う。

複雑しないのであれば、

オリジナルのマップを作成して、変換する

サンプルコード
/**
     * 半角→全角変換
     *
     * @param value 変換元文字列
     * @return 全角文字列
     */
    public static String convertHalfToFull(String value) {
        String result;
        // 変換内容がない場合
        if(String.isEmpty(value)) {
            result = '';
        }else{
            // 全角文字のみなら以降スキップ
            if (Pattern.matches('[^ -~。-゚]+', value)) {
                result = value;
            }else{
                // 濁音、半濁音は2文字で1文字に変換されるため先に実施
                       // ここはもっときれいにかける、Mapのputで、めんどいので、そのままにした
                Map<String, String> halftoFullMap1 = new Map<String, String>{
                                                                            'ガ' => 'ガ', 'ギ' => 'ギ', 'グ' => 'グ', 'ゲ' => 'ゲ', 'ゴ' => 'ゴ',
                                                                            'ザ' => 'ザ', 'ジ' => 'ジ', 'ズ' => 'ズ', 'ゼ' => 'ゼ', 'ゾ' => 'ゾ',
                                                                            'ダ' => 'ダ', 'ヂ' => 'ヂ', 'ヅ' => 'ヅ', 'デ' => 'デ', 'ド' => 'ド',
                                                                            'バ' => 'バ', 'ビ' => 'ビ', 'ブ' => 'ブ', 'ベ' => 'ベ', 'ボ' => 'ボ',
                                                                            'パ' => 'パ', 'ピ' => 'ピ', 'プ' => 'プ', 'ペ' => 'ペ', 'ポ' => 'ポ',
                                                                            'ヴ' => 'ヴ'
                                                                            };

                Map<String, String> halftoFullMap2 = new Map<String, String>{
                                                                            '!' => '!', '"' => '”', '#' => '#', '$' => '$', '%' => '%',
                                                                            '&' => '&', '\'' => '’', '(' => '(', ')' => ')', '*' => '*',
                                                                            '+' => '+', ',' => ',', '-' => '−', '.' => '.', '/' => '/',
                                                                            '0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
                                                                            '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
                                                                            ':' => ':', ';' => ';', '<' => '<', '=' => '=', '>' => '>',
                                                                            '?' => '?', '@' => '@', 'A' => 'A', 'B' => 'B', 'C' => 'C',
                                                                            'D' => 'D', 'E' => 'E', 'F' => 'F', 'G' => 'G', 'H' => 'H',
                                                                            'I' => 'I', 'J' => 'J', 'K' => 'K', 'L' => 'L', 'M' => 'M',
                                                                            'N' => 'N', 'O' => 'O', 'P' => 'P', 'Q' => 'Q', 'R' => 'R',
                                                                            'S' => 'S', 'T' => 'T', 'U' => 'U', 'V' => 'V', 'W' => 'W',
                                                                            'X' => 'X', 'Y' => 'Y', 'Z' => 'Z', '[' => '[', '\\' => '¥',
                                                                            ']' => ']', '^' => '^', '_' => '_', '`' => '‘', 'a' => 'a',
                                                                            'b' => 'b', 'c' => 'c', 'd' => 'd', 'e' => 'e', 'f' => 'f',
                                                                            'g' => 'g', 'h' => 'h', 'i' => 'i', 'j' => 'j', 'k' => 'k',
                                                                            'l' => 'l', 'm' => 'm', 'n' => 'n', 'o' => 'o', 'p' => 'p',
                                                                            'q' => 'q', 'r' => 'r', 's' => 's', 't' => 't', 'u' => 'u',
                                                                            'v' => 'v', 'w' => 'w', 'x' => 'x', 'y' => 'y', 'z' => 'z',
                                                                            '{' => '{', '|' => '|', '}' => '}', '~' => '〜', ' ' => ' ',
                                                                            '。' => '。', '「' => '「', '」' => '」', '、' => '、', '・' => '・',
                                                                            'ヲ' => 'ヲ', 'ァ' => 'ァ', 'ィ' => 'ィ', 'ゥ' => 'ゥ', 'ェ' => 'ェ',
                                                                            'ォ' => 'ォ', 'ャ' => 'ャ', 'ュ' => 'ュ', 'ョ' => 'ョ', 'ッ' => 'ッ',
                                                                            'ー' => 'ー', 'ア' => 'ア', 'イ' => 'イ', 'ウ' => 'ウ', 'エ' => 'エ',
                                                                            'オ' => 'オ', 'カ' => 'カ', 'キ' => 'キ', 'ク' => 'ク', 'ケ' => 'ケ',
                                                                            'コ' => 'コ', 'サ' => 'サ', 'シ' => 'シ', 'ス' => 'ス', 'セ' => 'セ',
                                                                            'ソ' => 'ソ', 'タ' => 'タ', 'チ' => 'チ', 'ツ' => 'ツ', 'テ' => 'テ',
                                                                            'ト' => 'ト', 'ナ' => 'ナ', 'ニ' => 'ニ', 'ヌ' => 'ヌ', 'ネ' => 'ネ',
                                                                            'ノ' => 'ノ', 'ハ' => 'ハ', 'ヒ' => 'ヒ', 'フ' => 'フ', 'ヘ' => 'ヘ',
                                                                            'ホ' => 'ホ', 'マ' => 'マ', 'ミ' => 'ミ', 'ム' => 'ム', 'メ' => 'メ',
                                                                            'モ' => 'モ', 'ヤ' => 'ヤ', 'ユ' => 'ユ', 'ヨ' => 'ヨ', 'ラ' => 'ラ',
                                                                            'リ' => 'リ', 'ル' => 'ル', 'レ' => 'レ', 'ロ' => 'ロ', 'ワ' => 'ワ',
                                                                            'ン' => 'ン', '゙' => '゛', '゚' => '゜'
                                                                        };
                // エスケープ必要文字
                Set<String> escapeChars = new Set<String>();
                escapeChars.add('\\');
                escapeChars.add('*');
                escapeChars.add('+');
                escapeChars.add('.');
                escapeChars.add('?');
                escapeChars.add('{');
                escapeChars.add('}');
                escapeChars.add('(');
                escapeChars.add(')');
                escapeChars.add('[');
                escapeChars.add(']');
                escapeChars.add('^');
                escapeChars.add('$');
                escapeChars.add('|');
                escapeChars.add('/');

                for (String key : halftoFullMap1.keySet()) {
                    if (value.contains(key)) {
                        value = value.replaceAll(key, halftoFullMap1.get(key));
                    }
                }

                for (String key : halftoFullMap2.keySet()) {
                    if (value.contains(key)) {
                        String tempKey = key;
                        if (escapeChars.contains(tempKey)) {
                            tempKey = '\\' + tempKey;
                        }
                        value = value.replaceAll(tempKey, halftoFullMap2.get(key));
                    }
                }
                result = value;
            }
        }
        return result;
    }

まとめ

上記のマッピングは一部、もっとしようと思えば、まだまだいける

改善版:SFDC APEX 全角 半角 - Memos About SalesForce

ご参考までに!