文字列を一文字ずつ分割する (全角・半角混合)
文字列を分解し、1文字ずつ処理を行いたい。全角文字、2バイト文字が含まれるなら、Jcode.pmを用いるのがお手軽だ。
「指定バイト数で自動的に改行する」で取り上げた、Jcode.pmの「jfold」メソッドを活用すれば良い。
jfoldは指定文字数分取り出してくれる機能を持つ。ここで"1"を指定しておくだけ。その後の全角・半角のチェックはJocdeが自動的に行ってくれる。混在していてももちろん大丈夫だ。
;# ;#文字列を1文字ずつ分割する (全角・半角混合) ;# use Jcode; #-- 分割 --# @char = str_jfold('Hello!は日本語でコンニチワです', 1); #-- 表示 --# foreach my $c (@char){ print "$c\n"; } #----------------------------------------------# #■指定文字数で分割する #----------------------------------------------# sub str_jfold{ my $str = shift; #指定文字列 my $byte = shift; #指定バイト my $j = new Jcode($str); my @result = (); foreach my $buff ( $j->jfold($byte) ){ push(@result, $buff); } return(@result); }
○実行結果
H e l l o ! は 日 本 語 で コ ン ニ チ ワ で す
返却される文字コードがEUCである点に注意
○関連
・文字列を一文字ずつ分割する (半角のみ)


コメント
全角で始めると、最初が空文字になるみたいです。そのため、この関数をつかって、文字列を処理し、得られた配列を操作しようとする際、処理回数が重要なファクターになる場合、1要素増えて望んだ動作ができないかもしれない、ようです。
投稿者: pumpCurry | 2009年05月07日 00:16