gpt4 book ai didi

java - 搜索和替换定界参数的算法

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

我有一个字符串,其中包含多个由# 分隔的参数,如下所示:

.... #param1# ... #param2# ... #paramN# ...

我想用值替换参数占位符。

目前的算法是这样的:

    //retrieve place holder into this SQL select
Pattern p = Pattern.compile(DIMConstants.FILE_LINE_ESCAPE_INDICATOR);
Matcher m = p.matcher(sqlToExec); // get a matcher object
int count = 0;
int start = 0;
int end = 0;

StringBuilder params = new StringBuilder();
while (m.find()) {
count++;

if (count % 2 == 0) {

// Second parameter delimiter

String patternId = sqlToExec.substring(start, m.end());

//Clean value (#value#->value)
String columnName = patternId.substring(1, patternId.length() - 1);

//Look for this column into preLoad row ResultSet and retrieve its value
String preLoadTableValue = DIMFormatUtil.convertToString(sourceRow.get(columnName));

if (!StringUtils.isEmpty(preLoadTableValue)) {
aSQL.append(loadGemaDao.escapeChars(preLoadTableValue).trim());
} else {
aSQL.append(DIMConstants.COL_VALUE_NULL);
}
params.append(" " + columnName + "=" + preLoadTableValue + " ");

end = m.end();

} else {
// First parameter delimiter
start = m.start();
aSQL.append(sqlToExec.substring(end, m.start()));
}
}

if (end < sqlToExec.length()) {
aSQL.append(sqlToExec.substring(end, sqlToExec.length()));
}

我正在寻找使用正则表达式或其他公共(public) API 的最简单的解决方案。输入参数将是源字符串、分隔符和值映射。输出参数将是替换所有参数的源字符串。

最佳答案

如果这是一个普通的 SQL 查询,您可能需要考虑使用 PreparedStatements

除此之外,我还缺少什么吗?为什么不直接使用 String.replace() 呢?您的代码可能如下所示:

for(int i = 0; i < n; i++){
String paramName = "#param" + i + "#"
sqlToExec = sqlToExec.replace(paramName,values.get(paramName));
}

假设您有一个名为“values”的映射,参数之间的字符串映射为“#paramN#”

关于java - 搜索和替换定界参数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2102178/

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