題目描述
使用正規表示式,我們可以輕易地搜尋在文本中符合的樣本。在搜尋樣本之前,我們必須先用嚴謹的語法將樣本定義好。
在這個問題中,您會得到一個樣本,您必須判斷這個樣本的語法是否是有效的。只有當Pattern.compile方法可以成功編譯出樣本時,表示這個正規表示式語法是有效的。
原題網址
輸入格式
第一行包含一個整數N,為測試資料的數量。接下來的N行,每行包含一個由任意可印出的字元組成的字串,為樣本的正規表示式。
輸出格式
替每個測試資料做檢查,如果語法是對的,輸出「Valid」,否則輸出「Invalid」。
範例輸入
3
([A-Z])(.+)
[AZ[a-z](a-z)
batcatpat(nat
([A-Z])(.+)
[AZ[a-z](a-z)
batcatpat(nat
範例輸出
Valid
Invalid
Invalid
Invalid
Invalid
解題概念
若樣本的正規表示式語法不是有效的,那麼當它在使用Pattern.compile方法編譯的時候,會拋出PatternSyntaxException例外,因此可以利用try-catch結構,來直接使用Pattern.compile方法編譯正規表示式語法,測試其是否是有效的語法。
參考答案
import java.util.Scanner;
import java.util.regex.Pattern;
public class Solution {
public static void main(final String[] args) {
final Scanner in = new Scanner(System.in);
int testCases = Integer.parseInt(in.nextLine());
while (testCases > 0) {
final String pattern = in.nextLine();
try {
Pattern.compile(pattern);
System.out.println("Valid");
} catch (final Exception ex) {
System.out.println("Invalid");
}
--testCases;
}
}
}