如何在Java中替换现有字符串中的特定字符串?
示例:
String param = "aa,bb,cc";
String str =
"select column_val from table_name where a = '?' and b = '?' and c = '?'";
现在我想用它的位置替换params ...
String newStr =
"select column_val from table_name where a = 'aa' and b = 'bb' and c = 'cc'";
我们怎么做? stringutil中是否存在任何现有方法,或者有任何方法可以执行此操作吗?
答案 0 :(得分:6)
处理此问题的正确方法是using PreparedStatement
。它不仅可以代替您,还可以防范SQL injection attacks。
是的,我只是在这里演示选择查询,但它不是选择查询,它是简单的字符串
在这种情况下,有一种简单的方法:
String param = "aa,bb,cc";
String str = "select column_val from table_name where a = '?' and b = '?' and c = '?'";
String fmt = str.replaceAll("[?]", "%s");
String newStr = String.format(fmt, (Object[])param.split(","));
确保您输入的图案没有任何杂散问号或百分号。
答案 1 :(得分:0)
String.format
听起来像你应该使用的;它基本上就像C sprintf
。详情可在Formatter
javadoc。
答案 2 :(得分:0)
String param = "aa,bb,cc";
String str =
"select column_val from table_name where a = # and b = # and c = #";
String [] arr = param.split(",");
for(int i=0; i<arr.length; i++){str.indexOf("#");
str = str.replaceFirst("#", "'"+arr[i]+"'");
}
System.out.println(str);
答案 3 :(得分:0)
我建议你使用StringBuilder。它们在您的字符串操作类型中提供了一些性能提升,特别是如果您的sql或params是长字符串。
以下是一个例子:
String param = "aa,bb,cc";
String str =
"select column_val from table_name where a = '?' and b = '?' and c = '?'";
@Test
public void Substitute(){
StringBuilder builder=new StringBuilder(str);
String[] params = param.split(",");
int position=0;
for (String paramValue:params){
position=builder.indexOf("?",position);
if (position==-1)
throw new RuntimeException("too parameter values specified.");
builder.replace(position,position+1,paramValue);
position++;
}
position=str.indexOf("?",position);
if (position!=-1)
throw new RuntimeException("Not all parameter specified.");
Assert.assertEquals(builder.toString(),
"select column_val from table_name where a = 'aa' and b = 'bb' and c = 'cc'");
}
正如其他人所说,记得清理param值以避免安全问题......