トップページ -> 実践知識 -> Java プログラミング入門 -> 正規表現による文字列マッチング
[サイトマップへ]  

正規表現による文字列マッチング

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

参考Webページ: http://www.atmarkit.co.jp/fjava/rensai2/jspservlet08/jspsevlet08_3.html


ポケットベルのキー入力(2桁の数字で1つの文字を生成)を再現

このプログラムでは,「0から9(半角数字)以外の文字が含まれているかどうか」を,正規表現を使って確認することを行ないます.

参考: http://www.macco.co.jp/~ktaimail/pocket/

test.com.PBEntryを実行すると、標準入力を受け付けます。 この状態で偶数個(0個は不可)の数字を入力すると、 上記URLの割当表に従って文字列が生成され、標準出力に表示されます。

Package名: test.com

PBmap.java

package test.com;

import java.util.regex.*;

/* ポケベル入力方式と仮名の対応をさせるメソッド */
public class PBmap {
	
	int ConsonantCode;	//子音
	int VocalCode;		//母音

	//ポケベル入力方式の文字マップ
	String Kana[] =
	{"あいうえおABCDE",
	 "かきくけこFGHIJ",
	 "さしすせそKLMNO",
	 "たちつてとPQRST",
	 "なにぬねのUVWXY",
	 "はひふへほZ?!−/",
	 "まみむめも¥&   ",
	 "や(ゆ)よ*#   ",
	 "らりるれろ12345",
	 "わをん゛゜67890" };
	
	// 番号からマップに指定された文字を呼び出すメソッド
	public char mapping(int CC, int VC){	
		return Kana[CC].charAt(VC);
	}
	
	
	// 入力された数字を解釈し、mappingメソッドを使って、文字列を生成するメソッド
	public StringBuffer checkMap(String EntryNo){
			
		StringBuffer strPB = new StringBuffer();

		//文字列の長さが偶数であるか確認
		if(EntryNo.length()==0 || EntryNo.length()%2 == 1){
			return new StringBuffer("2文字以上で偶数長の文字列を与えて下さい");
		}
			
		// 数字以外が含まれていないか、正規表現を用いて確認
		Pattern pattern = Pattern.compile("[0-9]+");
		Matcher matcher = pattern.matcher(EntryNo);

		if(matcher.matches()==false){//patternにマッチしない
			return new StringBuffer("数字以外が含まれています");
		}
			
		
		// 2つの数字で1つの文字が決定されるので、2文字ずつ処理する
		for(int i=0;i < EntryNo.length();i=i+2){
			
			//charを数字に変換
			int CC = Character.digit(EntryNo.charAt(i),10);
			int VC = Character.digit(EntryNo.charAt(i+1),10);
			
			//配列の添え字と、マップのインデクスとの調整		
			if(CC==0) CC = 9;
			else CC--;
			if(VC==0) VC = 9;
			else VC--;
				
			strPB.append(mapping(CC,VC));	//文字列への追加
		}
			
		return strPB;
	}


}

PBEntry.java

package test.com;

import java.io.*;

public class PBEntry {

	public static void main(String[] args) throws  Exception {
		
		PBmap Map1 = new PBmap();

		// 標準入力の準備(クラス作成)
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

		System.out.print("入力:");
		
		//入力された1行をStringに
		String input = new String(in.readLine());
		
		String Output = Map1.checkMap(input).toString();
		
		System.out.println("出力:"+Output);
	}

}