您好我需要能够在设定索引处用字符串替换一个字符。
示例:
"hello ? would you like a ? from ?"
这是我想要使用的方法:
query.bindValue(0,"Mr Boo");
query.bindValue(1,"cake");
query.bindValue(2,"Mr Foo");
输出我想:
"hello Mr Boo would you like a cake from Mr Foo"
我需要按任何顺序放置它,结果会相同:
query.bindValue(2,"Mr Foo");
query.bindValue(0,"Mr Boo");
query.bindValue(1,"cake");
解答:
public class DBQuery {
private String querystr;
Map<Integer,String> map = new HashMap<>();
public void prepare(String str){
this.querystr = str;
}
public void bindValue(int num, String value){
map.put(num, value);
}
public void execute(){
java.util.List<Integer> keys = new ArrayList<>(map.keySet());
Collections.sort(keys);
for(Integer key : keys){
querystr = querystr.replaceFirst("\\?", map.get(key));
}
System.out.println(querystr);
}
}
答案 0 :(得分:4)
这会将您的输入字符串转换为所需的输出:
str = String.format(str.replace("?", "%s"), "Mr Boo", "cake", "Mr Foo");
答案 1 :(得分:0)
如果你有一个方法在String中找到第n个?
并为一个单词重复它,那么主要问题就出现了。例如,第二个?
(id = 1)
您将替换为“蛋糕”,当您想要抓住第三个?
(id = 2)
时,以及从第二个?
开始已被蛋糕取代,现在将是“新的”第二名,而不是第三名。
因此,最好的方法是将查询按?
拆分为String Array
,将其设为static
,如果您想要绑定id = 1
,请选择{{ 1}}并附加您想要的字符串,如果您想要array[1]
选择id=n
并附加您的字符串..
最后,追加数组的所有元素,查询完成。
类似
array[n]
最后,返回查询,迭代数组并返回一个static String[] arrayQuery = "hello ? would you like a ? from ?".split("?");
public void fillQuery(int position, String word) {
arrayQuery[position] = arrayQuery[position]+word);
}
包含所有元素
答案 2 :(得分:0)
您可以使用Map
和regex
执行此操作,如下所示:
Map<Integer,String> map = new HashMap<>(); //this map contains the values
map.put(3, "Mr Foo");
map.put(0, "Mr Boo");
map.put(1, "cake");
map.put(2, "cookie");
String query = "hello ? would you like a ? or a ? from ?"; //this is the query
Matcher matcher = Pattern.compile("\\?").matcher(query);
int index = 0;
StringBuffer sb = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(sb, map.get(index));
index++;
}
matcher.appendTail(sb);
System.out.println(sb.toString()); // this will display the query as you want