やったこと
R2016b 以降のバージョンで使える string
型で半角カナ、全角カナを変換する関数作りました、、と言っても力技なので技術的な面白さとしてはアレなんですが、もし機会あれば使ってくださいませ。
関数はこちらにも上げています:
>> sampleString = '私はタマゴとスムージーとプリンを朝ごはんに食べる';
>> tmp = halfKana2fullKana(sampleString) % 半角 => 全角
tmp = '私はタマゴとスムージーとプリンを朝ごはんに食べる'
>> fullKana2halfKana(tmp) % 全角 => 半角
ans = '私はタマゴとスムージーとプリンを朝ごはんに食べる'
こんな具合。
文字置換: replace
関数
さて、どんな実装になっているかというと、文字の置き換えを行う replace
関数 を使うために、対応する半角カナ、全角カナを全部リストしちゃいます。ただの力技です。
濁音、半濁音の取り扱いが少しだけ面倒。半角カナだと2文字になっちゃうんですね。ここは置換の順番で対処します。
% 変換すべき文字リスト作成
halfKana = split("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンー","");
fullKana = split("アイウエオカキクケコサシスセソ" + ...
"タチツテトナニヌネノハヒフヘホ" + ...
"マミムメモヤユヨラリルレロワヲンー","");
halfKanaDakuon = split("カキクケコサシスセソタチツテトハヒフヘホ",{'',' '}) + "゙";
fullKanaDakuon = split("ガギグゲゴザジズゼゾダヂヅデドバビブベボ","");
halfKanaHandakuon = split("ハヒフヘホ","") + "゚";
fullKanaHandakuon = split("パピプペポ","");
% 上の作業では冒頭・最後に不要な文字列が入るので削除
halfKana([1,end]) = [];
fullKana([1,end]) = [];
halfKanaDakuon([1,end]) = [];
fullKanaDakuon([1,end]) = [];
halfKanaHandakuon([1,end]) = [];
fullKanaHandakuon([1,end]) = [];
そして replace
関数を使って全角カナ <-> 半角カナを置換してみます。
% 検証(半角 => 全角)
sampleString = '私はタマゴとスムージーとプリンを朝ごはんに食べる';
% 濁音と半濁音は先に変換
tmp = replace(sampleString,halfKanaHandakuon,fullKanaHandakuon);
tmp = replace(tmp,halfKanaDakuon,fullKanaDakuon);
% 残りを変換
sampleStringFull = replace(tmp,halfKana,fullKana)
% 検証(全角 => 半角)
% 濁音と半濁音以外を先に変換
tmp = replace(sampleStringFull,fullKana,halfKana);
% 濁音と半濁音を変換
tmp = replace(tmp,fullKanaDakuon,halfKanaDakuon);
sampleStringHalf = replace(tmp,fullKanaHandakuon,halfKanaHandakuon)
まとめ
特定の文字を置換してみました。
String
型ができてから文字列操作は随分楽になった気がします。
もし、他に面白い方法をご存知であればコメントください。
公式ページ:文字配列または string 配列を使用したテキストの表現