我想动态地用列表值替换字符串,而无需进行硬编码。 类似于“ list.get(0)”
在第一次迭代中==> str = str.replace("{Name}", 'One');
第二次迭代==> str = str.replace("{subInterfaceId}", 'Two');
谢谢。
String str = "Iamstillquite/{Name}/newtoJava/programm/ingandIam/{subInterfaceId}/tryingtoupdate/anexisting";
List<String> list = new ArrayList<>();
list.add("One");
list.add("Two");
for (String s : list) {
str = str.replace("{Name}", s);
}
预期输出:
String finalstr = "Iamstillquite/One/newtoJava/programm/ingandIam/Two/tryingtoupdate/anexisting";
答案 0 :(得分:1)
为此您需要一个Map
。它将键({Name}
)映射到值(One
)。
Map<String, String> map = new HashMap<>();
map.put("{Name}", "One");
map.put("{subInterfaceId}", "Two");
for (String key : map.keySet()) {
str = str.replace(key, map.get(key));
}
答案 1 :(得分:1)
做到这一点的最佳方法是使用正则表达式:
List<String> list = new ArrayList<>();
list.add("One");
list.add("Two");
String str = "Iamstillquite/{Name}/newtoJava/programm/ingandIam/{subInterfaceId}/tryingtoupdate/anexisting";
String regex = "(?<=^[^\\{]+)\\{.*?\\}";
for (String s : list)
{
str = str.replaceAll(regex, s);
}
System.out.println(str);
输出:
Iamstillquite/One/newtoJava/programm/ingandIam/Two/tryingtoupdate/anexisting
好处::您无需更改任何现有数据,并且正则表达式对于搜索和替换内容非常有用, 。
此外,您可以保持输入字符串str
的原样,这与您在此处给出的其他答案所要做的不同。
答案 2 :(得分:0)
List<String> list = new ArrayList<>();
list.add("One");
list.add("Two");
int counter = 0;
String str = new String("Iamstillquite/{Name0}/newtoJava/programm/ingandIam/{Name1}/tryingtoupdate/anexisting");
for (String s : list) {
str = str.replace("{Name" + counter + "}", s);
counter++;
}
使用计数器可能会很有用,以使更换更容易。这就是为什么您需要将要替换的字符串命名为{Name0},{Name1},{Name2}的原因……尽管它没有问题,因为您可以在必要时循环执行。
答案 3 :(得分:0)
您可以使用正则表达式和Matcher通过以下解决方案替换{}中的任何内容:
Pattern pat1 = Pattern.compile("(\\{[\\w]+\\})");
int index = 0;
Matcher m1 = pat1.matcher(str);
StringBuffer sb = new StringBuffer();
while(m1.find() && index<list.size()){ //checking index is necessary to not throw `ArrayIndexOutofBoundsException`
m1.appendReplacement(sb, list.get(index));
index += 1;
}
m1.appendTail(sb);
System.out.println(sb);
输出:
Iamstillquite/One/newtoJava/programm/ingandIam/Two/tryingtoupdate/anexisting