2011-02-17 45 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

为记录这是道德的。欢迎您赶上异常而不是检查空字符串。