トップページ -> プログラミング -> 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);
    }

}

本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]