2011-02-17 47 views
6

我遇到以下一段代碼的問題。我正在嘗試匹配一個字符串。當我有一場比賽時,一切都完美無缺。當它沒有找到匹配時,它會拋出異常並導致強制關閉。強制關閉正則表達式!匹配


代碼段

private void validatePhoneNumberFormat(String t){ 
    Pattern p = Pattern.compile("^Match this exactly!$"); 
    Matcher m = p.matcher(t); 
     m.find(); 
    if (m.group(0) != ""){ 
     this.myString = m.group(0); 
     this.setIsValid(true); 
     this.setStatus(0); 
    } else { 
     this.myString = "Invalid Input String"; 
     this.setIsValid(false); 
     this.setStatus(99); // String parsing error 
    } 
} 

logcat的

02-17 14:12:10.562: WARN/dalvikvm(3854): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854): FATAL EXCEPTION: main 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854): java.lang.IllegalStateException: No successful match so far 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at java.util.regex.Matcher.ensureMatch(Matcher.java:607) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at java.util.regex.Matcher.group(Matcher.java:358) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at com.android.example.RegExTest.MyList.validateMyStringFormat(MyList.java:47) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at com.android.example.RegExTest.MyList.<init>(MyList.java:15) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at com.android.example.RegExTest.DataManagerActivity.readInputFile(DataManagerActivity.java:128) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at com.android.example.RegExTest.DataManagerActivity$2.onClick(DataManagerActivity.java:77) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at android.view.View.performClick(View.java:2485) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at android.view.View$PerformClick.run(View.java:9080) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at android.os.Handler.handleCallback(Handler.java:587) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at android.os.Looper.loop(Looper.java:123) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-17 14:12:11.322: ERROR/AndroidRuntime(3854):  at dalvik.system.NativeStart.main(Native Method) 
02-17 14:12:11.402: WARN/ActivityManager(62): Force finishing activity com.android.example.RegExTest/.DataManagerActivity 

回答

11

嘗試檢查是否匹配,而不是:

if (m.matches()){ 

代替:

if (m.group(0) != ""){ 
+0

工作完美。感謝您幫助我們。 – 2011-02-17 15:06:14

1

爲記錄這是道德的。歡迎您趕上異常而不是檢查空字符串。