有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java正则表达式替换字符串时出现问题

当我尝试执行replaceAll时出现异常:

符号是有效的字符串

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 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.app.ActivityThread.access$2300(ActivityThread.java:125)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.os.Handler.dispatchMessage(Handler.java:99)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.os.Looper.loop(Looper.java:123)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at com.安卓.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 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-31 10:20:58.307: ERROR/AndroidRuntime(2104):     at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

共 (1) 个答案

  1. # 1 楼答案

    您需要转义*,因为它是一个量词 所以

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