在数组列表中向字符串添加文本

3
我正在尝试创建一个方法,该方法将获取ArrayList中的字符串,然后向每个字符串前添加文本。例如,如果我有一个名字为{jon, jimmy, kyle}的ArrayList,我希望该方法在名称之前放置"Good Morning, ",因此它将返回"Good Morning, jon","Good Morning, jimmy","Good Morning, kyle"。我已经搜索并找到了append,但似乎它是针对数组而不是ArrayList的。我真的找不到一个好的起点。任何帮助都将不胜感激。谢谢。
 public adding(ArrayList<String> al)
    {
        StringBuilder us = new StringBuilder();
           us.append("("+al[0]);
           for(int i = 1; i < al.length;i++) 
           {
              us.append("Good Morning, " + al[i]);
           }
           return us;
    } 

字符串是不可变的,因此您必须再次添加到列表中并删除先前的字符串 xD。 - nachokk
另外,在for循环中为什么要从i=1开始循环?应该是i=0。 - JNL
值得注意的是,您的设计决策本身可能存在缺陷。为什么需要在姓名之前存储“早上好”?最好只保留AL中的名称(唯一部分),每当您想要在前面打印“早上好”时,再与该字符串连接。这只是我的个人意见。 - Cruncher
4个回答

3

字符串是不可变的。因此,您必须在列表中重新设置值。

public void adding(ArrayList<String> al){
        for(int i = 0; i < al.size();i++){                  
              al.set(i,"Good Morning, "+al.get(i));
        }
}

2
那么为什么还要使用 StringBuilder 呢? - Bernhard Barker
方法集对参数不适用。同时,当返回该方法时,应返回所有正确的内容吗? - Sabbathlives
1
实际上,这个方法不需要返回任何东西。你传入的 ArrayList 会被直接修改。 - Cruncher
1
@Sabbathlives 为什么 set() 不适用于这些参数..?根据 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set,它是适用的。 - Prabhaker A

2

请尝试这个

public void adding(ArrayList<String> al)
{
       for(int i = 0; i < al.size();i++) 
       {
          al.set(i,"Good Morning , "+al.get(i));
       }
}

1
比 StringBuilder 解决方案更加直接明了。 - Cruncher
@Cruncher更加简单直接,但效率不如其他方法。尽管如此,在大多数情况下,这是我会选择的方法。 - StormeHawke
2
@StormeHawke 创建一个新的字符串构建器并进行两次附加比将字符串文字与另一个字符串连接更快吗? - Cruncher
1
@StormeHawke :), 是的,我正在思考。如果创建一个新的StringBuilder并将其附加两次比串联Strings快,那么编译器将仅在您连接时使用StringBuilder。但坦率地说,我不知道串联是如何实现的,或者为什么向StringBuilder添加10次比10个连接更快。我只知道何时使用StringBuilder和何时不使用它的用例。 - Cruncher

0
你可以使用Apache Commons Lang,它有一个StringUtils类。它有一个join函数,可以将数组连接在一起形成一个字符串。
例如:
String result="Good morning ";
result +=StringUtils.join(new String[] {"jon", "jimmy", "kyle"}, ", Good morning ");

join() 函数接受可迭代对象,因此它也适用于列表。


0

2
如何回答:在回答中提供潜在解决方案的链接总是受欢迎的,但请添加链接周围的上下文,以便其他用户了解它是什么以及为什么存在。始终引用重要链接的最相关部分,以防目标站点无法访问或永久离线。 - BackSlash
感谢BackSlash的宝贵评论。我会遵循那个。 - Abhijith Nagarajan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接