【问题标题】:Adding text to a string in an array list将文本添加到数组列表中的字符串
【发布时间】:2013-09-24 16:41:23
【问题描述】:

我正在尝试创建一个方法,该方法将接收 ArrayList 上的字符串,然后将文本添加到每个字符串的开头。例如如果我有一个名称 {jon, jimmy, kyle} 的 ArrayList。我希望该方法将“早安”放在名称之前的字符串中。所以它会返回“早安,乔恩”、“早安,吉米”、“早安,凯尔”。我已经搜索并找到了 append,但它似乎是用于数组而不是数组列表。 我什至找不到一个好的起点。任何帮助将不胜感激。谢谢。

代码真的没用,但至少它的东西。

 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
  • 另外,你为什么在 for 循环中从 i=1 开始循环?它应该是 i=0
  • 值得注意的是,您的设计决策本身可能存在缺陷。为什么你需要在他们的名字之前存储“早安”?最好只保留 AL(唯一部分)中的名称,并且每当您想在前面打印 Good Morning 时,然后在该点与字符串连接。只是我的 2 美分。

标签: java string arraylist


【解决方案1】:

您可以使用具有 StringUtils 类的 Apache Commons Lang。它有一个连接函数,可以将数组连接在一起形成一个字符串。

例子:

String result="Good morning ";
result +=StringUtils.join(new String[] {"jon", "jimmy", "kyle"}, ", Good morning ");

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

【讨论】:

    【解决方案2】:

    字符串是不可变的。所以你必须在列表中再次设置值。

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

    【讨论】:

    • 那为什么还要使用StringBuilder呢?
    • 方法集不适用于参数。同样在返回方法时我会返回正确吗?
    • 实际上,该方法不必返回任何内容。您传入的 ArrayList 将原地更改。
    • @Sabbathlives 为什么set() 不适用于参数...?根据docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set 适用
    【解决方案3】:

    试试这个

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

    【讨论】:

    • 比 StringBuilder 解决方案更直接
    • @Cruncher 更直接,但效率不高。不过,在大多数情况下,这就是我要运行的内容
    • @StormeHawke 创建一个新的字符串生成器以追加到两次比将字符串文字与另一个字符串连接更快?
    • @StormeHawke :),是的,我只是在想。如果创建一个新的 StringBuilder 并将其附加两次比连接字符串快,那么编译器只会在您连接的任何地方使用 StringBuilder。但坦率地说,我不知道究竟是如何实现连接的,也不知道为什么将 10 次附加到 StringBuilder 比 10 次连接要快。我只知道什么时候使用 StringBuilder 什么时候不使用的用例
    【解决方案4】:

    【讨论】:

    • How to answer: 始终欢迎提供指向潜在解决方案的链接,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
    • 感谢 BackSlash 的宝贵意见。我会遵守的
    猜你喜欢
    • 2021-06-09
    • 2019-12-17
    • 1970-01-01
    • 2013-12-28
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多