我该如何从如下列表值进行字符串操作

时间:2019-01-19 08:01:14

标签: java

我想动态地用列表值替换字符串,而无需进行硬编码。 类似于“ 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";

4 个答案:

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