プログラミングの基本中の基本である文字列に関する処理で勉強になったことがあったので備忘録。
先日、企業の方にJavaの正規表現を用いたパターンマッチについて教えていただいた。こんな便利なモノがあるとは知らなかった。
調べたところ、文字列から検索処理を行う方法は代表的なもので以下の2つがあるようだ。
- for文 + charAt関数を使う方法
- 正規表現 + パターンマッチを使う方法
for文 + charAt関数を使った処理方法のサンプルソース
public class mojihikaku { public static void main(String[] args) { String str = "abcde"; for(int i = 0; i != str.length(); i++){ if(str.charAt(i) == 'c'){ System.out.println(+ i + 1 +"文字目はマッチしました。"); }else{ System.out.println(+ i + 1 +"文字目はマッチしません。"); } } }}
上記はString型のstrにcという文字が含まれているかを判定しているサンプルソースである。charAt関数を使うので文字列型(“”)ではなく、文字型(”)として比較する。
正規表現 + パターンマッチを使った処理方法のサンプルソース
import java.util.regex.Matcher;import java.util.regex.Pattern;public class seikihyougen_sample { public static void main(String[] args) { String str1 = "poebon"; String str2 = "osabcd"; String str3 = "abcdef"; //"e"で始まり任意の文字が0回以上繰り返された後で"o"が出現する」というパターン String regex1 = "e.*o"; //abcという連続した文字列が含まれるかどうかを調べるパターン String regex2 = "abc"; //ターゲット文字列の先頭から現れるかどうかを調べるパターン String regex3 = "^abc"; Pattern p = Pattern.compile(regex3); Matcher m = p.matcher(str3); if (m.find()){ System.out.println("マッチしました"); }else{ System.out.println("マッチしません"); } }}
MatcherクラスとPatternクラスを用いて、文字列の比較を行う。文字列中に含まれている、”.*”や”^”が正規表現と呼ばれるものである。