正規表現による文字列マッチング(Java を使用)
【サイト内の Java 関連の資料】
ポケットベルのキー入力(2桁の数字で1つの文字を生成)を再現
このプログラムでは,「0から9(半角数字)以外の文字が含まれているかどうか」を,正規表現を使って確認することを行う.
参考ページ:http://www.macco.co.jp/~ktaimail/pocket/ で公開された記事を参考にしました.
test.com.PBEntryを実行すると、標準入力を受け付けます。 この状態で偶数個(0個は不可)の数字を入力すると、 上記URLの割当表に従って文字列が生成され、標準出力に表示されます。
PBMap.java
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
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);
}
}
【Windows での実行】
Windows で,ファイル PBMap.java, PBEntry を編集し実行するために,次のコマンドを, コマンドプロンプトで実行する.
cd %LOCALAPPDATA%
notepad PBMap.java
notepad PBEntry.java
javac -encoding UTF-8 PBMap.java
javac -encoding UTF-8 PBEntry.java
java PBEntry
