Java 在列表中间插入

Java 在列表中间插入,java,collections,Java,Collections,我有一个包含例如abc的元素列表。要生成文档aXbc,我在位置1插入X。但是,列表将abc作为一个元素,因此位置1实际上是列表内容中的位置4。所以,我的问题是,我如何直接插入这个列表的中间,直接产生 AXBC/?当然,我可以浏览列表和concat每个元素!但是java中没有一个直接实现这一点的结构 list.add("abc"); list.add(1, "X"); 想要aXbc您混淆了列表中的元素和字符串中的字符。如果要在另一个字符串的中间插入字符或字符串,请使用 StringBuilder

我有一个包含例如
abc
的元素列表。要生成文档
aXbc
,我在位置1插入
X
。但是,列表将abc作为一个元素,因此位置1实际上是列表内容中的位置4。所以,我的问题是,我如何直接插入这个列表的中间,直接产生<代码> AXBC/<代码>?当然,我可以浏览列表和
concat
每个元素!但是java中没有一个直接实现这一点的结构

list.add("abc");
list.add(1, "X");

想要
aXbc

您混淆了
列表中的元素和
字符串中的字符。如果要在另一个字符串的中间插入字符或字符串,请使用<代码> StringBuilder < /C> > < /P>

当然,您可以创建一个
字符列表
,如果您设置为使用
列表
,您需要

list.add(1, new StringBuilder(list.get(1)).insert(somePosition, "someString").toString());
 list.set(1, new StringBuilder(list.get(1)).insert(1, "X").toString());

这意味着在列表的位置获取字符串,并在所需位置插入一些字符串,然后将其放回相同的
位置

您有一个字符串列表。需要记住的一点是,
String
是不可变的:一旦它存在,您就不能更改它,您只能用一个新值覆盖它

最好的做法是创建一个新字符串:

String value = "abc";
StringBuilder sb = new StringBuilder();

sb.append(value.subString(0, 1));
sb.append("X");
sb.append(value.subString(1, value.length()));
如果确实要使用列表,请执行以下操作:

public static void main(String[] args) {
    String value = "abc";

    List<Character> characters = new ArrayList<Character>();
    for(char c : value.toCharArray()){
        characters.add(c);
    }

    characters.add(1, 'X');
    System.out.println(characters);

    StringBuilder sb = new StringBuilder();
    for(char c : characters){
        sb.append(c);
    }

    System.out.println(sb.toString());
}
publicstaticvoidmain(字符串[]args){
字符串值=“abc”;
列表字符=新的ArrayList();
for(char c:value.toCharArray()){
字符。添加(c);
}
字符。添加(1,'X');
System.out.println(字符);
StringBuilder sb=新的StringBuilder();
for(字符c:字符){
sb.附加(c);
}
System.out.println(sb.toString());
}
输出:

[a,X,b,c]
aXbc

这将基于给定字符串中的字符创建新的字符列表。

您需要
list.set(index,Element)
方法
add
方法将向
列表添加新元素

 list.set(1, new StringBuilder(list.get(1)).insert(1, "X").toString());

您需要一个专门的字符串列表,它允许通过向所有成员中插入字符来转换所有成员

绝对没有Java类具有这种专门的行为,我也没有听说过在知名的公共库中有任何东西

与您要查找的内容最匹配的是一个面向函数的API,它允许使用映射函数通过插入字符将输入字符串转换为输出字符串,从而对列表进行
map
转换

Google Guava库支持这种面向函数的列表操作。另外,请查看到目前为止相当稳定的Java8EarlyAccess,它具有这种内置功能

像这样做

int index= list.indexOf("abc"); // Getting the position of the object.
if(index != -1){    
    String newString = new StringBuffer("abc").insert(1,"X").toString();// Modifying  the object
    list.set(index, newString ); //Updating the object in same position.
}

您正在尝试插入字符串的中间部分。您能给出一个更复杂的示例来描述插入操作前后列表的状态吗?他并没有混淆它们——他在问如何在不手动迭代和浓缩每个元素的情况下使其工作。他说的是Marko“然而,列表将abc作为一个元素,因此位置1实际上是我列表内容中的位置4。”这听起来像是对列表是什么的混淆。他还说“当然,我可以浏览列表并对每个元素进行concat!但是java中没有一个直接实现这一点的结构?“这听起来像是他知道自己在说什么,即使他没有以最清晰的方式表达自己。这看起来更像是一个评论,而不是答案。。。至少对我来说是这样。@Kayaman感谢你的回答,但正如Marko所说,如果可能的话,我想使用一个集合。请解释一下为什么你的答案有效,以便其他人可以从你的答案中学习。