java如何用字符串替换set索引处的char

时间:2013-10-26 13:26:31

标签: java string replace char

您好我需要能够在设定索引处用字符串替换一个字符。

示例:

"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);
}
}

3 个答案:

答案 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)

您可以使用Mapregex执行此操作,如下所示:

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