2015-11-18 64 views
-3

請幫我展示正確的輸出。我怎麼能得到這個真實的我總是在我的輸出中得到錯誤。Java常規表達式

System.out.print("Enter Time: "); 
    str = scanner.nextLine(); 

    String regextime = "((([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][ ]?[AaPp][Mm]) | ((([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9])"; 
    //12 hr 
    //(([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][ ]?[AaPp][Mm] 
    //24hr 
    //(([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9] 
    System.out.println(str.matches(regextime)); 
+1

什麼是期望的輸入和輸出?如果您的輸入與正則表達式不匹配,您的輸出中肯定會出現錯誤。 – Atri

+0

它會打印聲明是真的嗎?呃我需要根據給定的陳述來制定它。謝謝先生! –

+0

@ashutosh是我的陳述是否正確?我的示例輸入是1:25:25上午它應該打印真實或23:23:59 shoudl也打印真實 –

回答

1

正則表達式模式不允許隨機空白。你有兩個大的正則表達式模式,中間用|分開。 |每邊都有空間。正則表達式匹配器假定這些空間旨在成爲該模式的一部分,因此在ampm時間內,它預計會有一個尾隨空間,並且在24小時內預計會有一個空間。

您的模式更改爲:

String regextime = "((([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][ ]?[AaPp][Mm])|((([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9])"; 

或者,如果你想保留爲清晰起見,空格,你可以添加一個標誌,你的模式(?x)告訴它忽略空白。你必須避開你想要保留的所有空格,所以你必須在AM/PM前面的字符類前面加上\\

String regextime = "(?x)((([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][\\ ]?[AaPp][Mm]) | ((([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9])"; 
+0

你明白了!非常感謝 :) –