フィルターのクリア

全角文字と半角文字を​判別する方法を教えて​いただきたいです。

60 ビュー (過去 30 日間)
丈太郎 森川
丈太郎 森川 2022 年 3 月 23 日
コメント済み: 丈太郎 森川 2022 年 3 月 23 日
MATLABで全角文字と半角文字を判別する方法を教えていただきたいでしょうか。
例えば、["A" "B" "1" "2" "A" "B" "1" "2"](左のAB12が半角、右のAB12が全角)
であれば、[1 1 1 1 0 0 0 0]の様な答えが出る形です。
よろしくお願いいたします

採用された回答

Takashi Ueno
Takashi Ueno 2022 年 3 月 23 日
下記のような実装ではいかがでしょうか?
半角英数はASCII文字ですのでdouble()でchar型をキャストした際に127以下となります。
s=["A" "B" "1" "2" "A" "B" "1" "2"];
double([s{:}])<128
ans = 1×8 logical array
1 1 1 1 0 0 0 0
  1 件のコメント
丈太郎 森川
丈太郎 森川 2022 年 3 月 23 日
早速のご回答ありがとうございます。大変助かります。こちらを採用したいと思います。

サインインしてコメントする。

その他の回答 (1 件)

Kojiro Saito
Kojiro Saito 2022 年 3 月 23 日
半角カナも対象にする場合は、doubleでcharにキャストすると127を超えてしまうので、unicode2nativeでバイトに変換する方法が堅牢です。
Shift-JISだと半角が1バイト、全角が2バイトになるので、バイト数が1なら1、それ以外なら0になるようにすることで位置を特定できます。
s = ["A" "B" "1" "2" "A" "B" "1" "2" "ア" "ア" "あ"];
cell2mat(arrayfun(@(x) length(unicode2native(x, 'Shift_JIS')), s, 'UniformOutput', false)) == 1
ans = 1×11 logical array
1 1 1 1 0 0 0 0 0 1 0
  1 件のコメント
丈太郎 森川
丈太郎 森川 2022 年 3 月 23 日
早速のご回答ありがとうございます。今回は英数のみで判別したため、Uenoさんの回答を採用させていただきました。今後カナを使用する際はこちらのコードを参考にさせていただきます。

サインインしてコメントする。

カテゴリ

Help Center および File Exchange三角形分割表現 についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!