Hatena::ブログ(Diary)

独学ActionScript このページをアンテナに追加 RSSフィード

2009.11.18

【AS3入門】文字列を1文字ずつ走査して英語か日本語かを判別する

与えられた文字列を1文字ずつ走査して、それが英語(1バイト文字)か日本語(多バイト文字)かを判定する方法をメモ。


文字列を1文字ずつ走査して英語か日本語かを判別するメソッド

Unicodeの一覧表を参考に、ネットで情報を探してみたところ、0x0000〜0x00FFまでの文字コードを英語と判定しているようで、String#charCodeAt()メソッドを使って1文字ずつ判定するメソッドを作りました。

public function judgeEnglishOrJapanese(text:String):void 
{
	for (var i:int = 0; i < text.length; i++) 
	{
		if (text.charCodeAt(i) < 256)
		{	// 英語の場合
			trace("「" + text.charAt(i) + "」は英語");
		}
		else 
		{	// 日本語の場合
			trace("「" + text.charAt(i) + "」は日本語");
		}
	}
}

judgeEnglishOrJapanese('あいうえお、12345,"独学ActionScript"');

このメソッドを上記のように実行すると、トレース結果は以下のようになります。

「あ」は日本語
「い」は日本語
「う」は日本語
「え」は日本語
「お」は日本語
「、」は日本語
「1」は英語
「2」は英語
「3」は英語
「4」は英語
「5」は英語
「,」は英語
「"」は英語
「独」は日本語
「学」は日本語
「A」は英語
「c」は英語
「t」は英語
「i」は英語
「o」は英語
「n」は英語
「S」は英語
「c」は英語
「r」は英語
「i」は英語
「p」は英語
「t」は英語
「"」は英語

ただし、ここでは便宜上「日本語」と判定していますが、厳密には「日本語」ではなく「英語以外の言語」が当てはまります。


英語部分と日本語部分をそれぞれ特定のタグで囲むメソッド

この英語と日本語の判別をして何がしたかったかというと、それぞれの言語を特定のタグで囲む処理をしたかったのです。具体的には、英語と日本語で別のフォント指定をするHTMLタグで囲むのが目的です。以下が、上記のメソッドをそれぞれの言語によってタグで囲むように置き換えたものです。

public function judgeEnglishOrJapanese2(text:String):void 
{
	var htmlText:String = "";
	var isEnglish:Boolean;
	
	for (var i:int = 0; i < text.length; i++) 
	{
		if (text.charCodeAt(i) < 256)
		{	// 英語の場合
			htmlText += (i == 0) ? "<english>" + text.charAt(i)
								 : (isEnglish) ? text.charAt(i)
											   : "</japanese><english>" + text.charAt(i);
			htmlText += (i == text.length - 1) ? "</english>" : "";
			isEnglish = true;
		}
		else 
		{	// 日本語の場合
			htmlText += (i == 0) ? "<japanese>" + text.charAt(i)
								 : (!isEnglish) ? text.charAt(i)
											   : "</english><japanese>" + text.charAt(i);
			htmlText += (i == text.length - 1) ? "</japanese>" : "";
			isEnglish = false;
		}
	}
	
	trace(htmlText);
}

judgeEnglishOrJapanese2('あいうえお、12345,"独学ActionScript"');

このメソッドを上記のように実行すると、トレース結果は以下のようになります。

<japanese>あいうえお、</japanese><english>12345,"</english><japanese>独学</japanese><english>ActionScript"</english>

まとめ

このシリーズのエントリーは、「AS3入門」のまとめにまとめてあります。

NeranNeran 2009/11/21 11:23 英語、日本語というより、ASCIIの判定ですよね。

ActionScriptActionScript 2009/11/21 17:02 コメントありがとうございます!
そうですー、便宜上「英語と日本語」と書いてますが、単に文字コードで振り分けているだけですw
もっと良い方法などありましたら是非教えてくださいせ!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ActionScript/20091118/as3_judge_english_or_japanese