2011-02-17 27 views
6

Tengo un problema con el siguiente fragmento de código. Estoy tratando de hacer coincidir una cuerda. Cuando tengo una coincidencia, todo funciona perfectamente. Cuando no encuentra una coincidencia, lanza una excepción y provoca el cierre de una fuerza.Fuerza Cerrar en la expresión regular! Coincide


Fragmento de código

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 

Respuesta

11

trata de leer para un partido en su lugar:

if (m.matches()){ 

en lugar de:

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

Funcionado perfectamente. Gracias por ayudar a un nOOb. –

1

Esto se está comportando como se documenta. Le invitamos a atrapar la excepción en lugar de buscar la cadena vacía.

Cuestiones relacionadas