« 文字列を一文字ずつ分割する (半角のみ) | メイン | アルファベットを大文字/小文字に変換する (半角のみ) »

カテゴリー:文字列 

文字列を一文字ずつ分割する (全角・半角混合)

このエントリーを含むはてなブックマーク  livedoorクリップ  文字列を一文字ずつ分割する (全角・半角混合)をdel.icio.usに追加  文字列を一文字ずつ分割する (全角・半角混合)をYahoo!ブックマークに追加  文字列を一文字ずつ分割する (全角・半角混合)をニフティクリップに追加

文字列を分解し、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である点に注意


○関連
文字列を一文字ずつ分割する (半角のみ)




トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/592

コメント

全角で始めると、最初が空文字になるみたいです。そのため、この関数をつかって、文字列を処理し、得られた配列を操作しようとする際、処理回数が重要なファクターになる場合、1要素増えて望んだ動作ができないかもしれない、ようです。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

VPSレンタルサーバー




クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.