金子邦彦研究室プログラミングJava のプログラム例正規表現による文字列マッチング(Java を使用)

正規表現による文字列マッチング(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

[image]