你能帮我理解为什么我的代码不起作用吗?
我试图从我的数据库的2列中获取值,并将它们存储在一个哈希映射中,其中K_PARAM是我的密钥,L_PARAM是我的值。然后我想比较我正在提取的一行中的两个字符,看看这两个字符是否等于我的密钥。如果它们是等号,我将键替换为值。
提前致谢。这是代码:
if (action.equals("RP")) {
if (marqueCarte = null) {
jdbcTemplate.query(" select K_PARAM, L_PARAM from DLCOA.DLC_ADM_PARAMS where K_CHX_PARAM = '50'", new ResultSetExtractor<Map>(){
@Override
public Map extractData(ResultSet rs) throws SQLException,DataAccessException {
HashMap<String,String> marqueCarte = new HashMap<String,String>();
while (rs.next()) {
marqueCarte.put(rs.getString("K_PARAM"),rs.getString("L_PARAM"));
if (line.contains("blocE")) {
if (line.substring(line.indexOf("blocE") + 15, line.indexOf("blocE") + 15 + (line.substring(line.indexOf("blocE")+15)).indexOf("#")).equals(rs.getString("K_PARAM"))){
line = line.replace(line.substring(line.indexOf("blocE") + 15, line.indexOf("blocE") + 15 + (line.substring(line.indexOf("blocE")+15)).indexOf("#")),rs.getString("L_PARAM") );
}
}
}
return marqueCarte;
}
}
}
}
答案 0 :(得分:0)
我为您的第二个问题提供了更具可读性和可修改性的解决方案。 (我还不确定你的第一个是什么)
使用正则表达式和模式,您可以实现所需的替换。
我们假设您正在搜索文本&#34; blocE&#34;后跟15个字符,同时由rs.getString("K_PARAM")
中包含的文字加上&#34;#&#34;
我们可以将您搜索的内容建模为像这样的模式
"(blocE)(.{15})(" + key + "#)"
括号允许我们在正则表达式中建立不同的组。
Group 1 - blocE
Group 2 - 15 characters
Group 3 - key + #
将第0组作为完整的匹配表达式。
知道这一点,您可以使用以下代码进行替换
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestRegex {
public static void main(String[] args) {
String key = "KEY"; // rs.getString("K_PARAM")
String value = "VALUE"; // rs.getString("L_PARAM")
Pattern pattern = Pattern.compile("(blocE)(.{15})(" + key + "#)");
String input ="helloworldblocE111111111111111KEY#blocE111111111111111KEY";
Matcher m = pattern.matcher(input);
if (m.find()) {
String text2replace = m.group(0);
String replacement = m.group(1) + m.group(2) + value;
System.out.println(input.replaceFirst(text2replace, replacement));
}
}
}
如果您的模式发生变化,您只需要更改一行,而不必担心indexOf
的数量。