2013-09-03 1 views
15

近くの正規表現パターンの構文エラーコードjava.util.regex.PatternSyntaxException:インデックス

String s = "12+12"; 
String[] sr = s.split("+"); 

以下に分割し、私はlogcatに

09-03 15:57:22.489: E/AndroidRuntime(22029): FATAL EXCEPTION: main 
09-03 15:57:22.489: E/AndroidRuntime(22029): java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1: 
09-03 15:57:22.489: E/AndroidRuntime(22029): + 
09-03 15:57:22.489: E/AndroidRuntime(22029):^
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.util.regex.Pattern.compileImpl(Native Method) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.util.regex.Pattern.compile(Pattern.java:407) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.util.regex.Pattern.<init>(Pattern.java:390) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.util.regex.Pattern.compile(Pattern.java:381) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.lang.String.split(String.java:1832) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.lang.String.split(String.java:1813) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at net.telivo.fiestacancun.ui.calllog.CallLogDetailsFragment$1.onClick(CallLogDetailsFragment.java:171) 
    09-03 15:57:22.489: E/AndroidRuntime(22029): at android.view.View.performClick(View.java:4240) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at android.view.View$PerformClick.run(View.java:17721) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at android.os.Handler.handleCallback(Handler.java:730) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at android.os.Looper.loop(Looper.java:137) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at java.lang.reflect.Method.invoke(Method.java:525) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-03 15:57:22.489: E/AndroidRuntime(22029): at dalvik.system.NativeStart.main(Native Method) 

答えて

36

String#splitregexを受け入れます。

あなたがspecial char+をエスケープしたくない場合は、Pattern#quoteを使用することができます。

指定された文字列に対する リテラルのパターン文字列を返します


String sr[] = s.split(Pattern.quote("+")); 

+は現在、通常の文字ではなくメタ文字として扱われます。 +以来

+4

ありがとうございます –

4

+をこのエラーを取得していますがが、原因をエスケープする必要があります+quantifiers

のいずれかを表すために使用されることがあるべきであるs.split("\\+");

2

は、メタ文字であり、あなたが+文字をエスケープする必要があり、メタ文字

String s = "12+12"; 
String[] sr = s.split("\\+"); 

oracle docs on the same

8

ことをエスケープする必要がありregexで特別な意味を持ちます。正規表現のエスケープ

String s = "12+12"; 
String[] sr = s.split("\\+"); 

通常\によって行われますが、Java \\\として表現されます。

関連する問題