I♥TLE

Java、オンラインジャッジなど

B問題を正規表現で解いてみる

実装の概要

模範解答ではループで1文字ずつ数字かどうか(あるいはハイフンかどうか)をチェックしていました。
前後の数字の桁数がはっきりa,bと決まっているため特に正規表現の必要はありませんが、練習の意味で意識的に正規表現を使ってみようと思いました。
例えば現実の日本の郵便番号は「(数字3桁)-(数字4桁)」なので、パターン文字列は"\d{3}-\d{4}"となります。なお、実際のコード内ではバックスラッシュはエスケープが必要なので注意しましょう。この数字の部分をa,bに応じて変えることができれば解くことができます。

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String input = br.readLine();
		String[] tmpArray = input.split(" ");
		int a = Integer.parseInt(tmpArray[0]);
		int b = Integer.parseInt(tmpArray[1]);
		
		String posStr = br.readLine();
		
		String ptnStr = "\\d{"+a+"}-\\d{"+b+"}";
		
		if(Pattern.matches(ptnStr, posStr)){
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	}

}