gpt4 book ai didi

java - android - 在包含特殊字符的特定字符串上使用 replaceAll 时出现 java.lang.ArrayIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-11-29 03:09:29 25 4
gpt4 key购买 nike

问题

我正在使用 Abatis 作为 ORM。当我尝试插入包含特定字符串的 json 时,它崩溃了。

我已经从 Abatis 中提取了产生错误的代码:

代码

            Map<String, Object> bindParams = new HashMap<String, Object>();

bindParams.put("id", "194fa0f2-9706-493f-97ab-4eb300a8e4ed");
bindParams.put("field", "{\"Messages\":\"ERRORE durante l'invocazione del servizio. 01 - Executor [java.util.concurrent.ThreadPoolExecutor@18a96588] did not accept task: org.springframework.aop.interceptor.AsyncExecutionInterceptor$1@14a7c67b\",\"Errors\":1}");

String sql = "UPDATE <TABLE> SET NoteAgente = #field# WHERE Id = #id#";

if (bindParams != null) {
Iterator<String> mapIterator = bindParams.keySet().iterator();
while (mapIterator.hasNext()) {
String key = mapIterator.next();
Object value = bindParams.get(key);

if(value instanceof String && value != null)
value = value.toString().replace("'", "''");

sql = sql.replaceAll("#" + key + "#", value == null ? "null"
: "'" + value.toString() + "'");
}
}

问题出在带有字符串$1@14a7c67breplaceAll 方法中。您也可以调试它编写

String s = "onetwothree";               
s = s.replaceAll("one", "$1@14a7c67b");

它也会崩溃。

最佳答案

replaceAll采用正则表达式参数,$1 是告诉 java 正则表达式引擎使用 group-one 作为替换的特殊方式。

您需要使用 replace从字面上匹配/替换字符串:

String s = "onetwothree";
s = s.replace("one", "$1@14a7c67b");

如果您仍然需要使用 replaceAll,您也可以转义 $ 字符:

s = s.replaceAll("one", "\\$1@14a7c67b");

关于java - android - 在包含特殊字符的特定字符串上使用 replaceAll 时出现 java.lang.ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com