2010-08-31 70 views
2

我得到一个异常时,我尝试做一个的replaceAll:的Java问题正则表达式替换字符串

符号是一个有效的字符串。

private String buildQuery(){ 
     String query = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(**QUERY**)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="; 

     deserializeQuotes(); 

     StringBuffer symbols = new StringBuffer(); 
     for(int i = 0; i < quotes.size();i++){ 
      if(i == (quotes.size()-1)) 
       symbols.append("%22" + quotes.get(i).getSymbol() + "%22%"); //end with a quote 
      else 
       symbols.append("%22" + quotes.get(i).getSymbol() + "%22%2C"); 
     } 

     query.replaceAll("**QUERY**", symbols.toString()); 

     return query; 
    } 

我得到以下异常:

08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.os.Looper.loop(Looper.java:123) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at dalvik.system.NativeStart.main(Native Method) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104): Caused by: java.util.regex.PatternSyntaxException: Syntax error U_REGEX_RULE_SYNTAX near index 1: 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104): **QUERY** 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):^
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at com.ibm.icu4jni.regex.NativeRegEx.open(Native Method) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at java.util.regex.Pattern.compileImpl(Pattern.java:383) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at java.util.regex.Pattern.<init>(Pattern.java:341) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at java.util.regex.Pattern.compile(Pattern.java:358) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at java.lang.String.replaceAll(String.java:2004) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at org.stocktwits.activity.Main.buildQuery(Main.java:193) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at org.stocktwits.activity.Main.createDataModel(Main.java:198) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at org.stocktwits.activity.Main.onCreate(Main.java:73) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

回答

3

你需要逃避*,因为它是一个量词 所以,

query.replaceAll("\*\*QUERY\*\*", symbols.toString()); 
+0

感谢。我改变了我的表情,而不是像“REPLACEME”。 – 2010-08-31 17:34:14