【问题标题】:How to create a array with String array and a String [duplicate]如何使用字符串数组和字符串创建数组[重复]
【发布时间】:2016-08-02 05:22:45
【问题描述】:

我需要将动态字符串值附加到具有已知值的新字符串数组中。

static final String [] ARRAY = {"A","B","C"};
String d = "D"; // could be changing dynamically.

我的问题是将值附加到具有动态字符串值的新字符串数组。

我需要这样的东西。

String [] EXPECTED_ARRAY = {ARRAY, d}; // does not compile.

预期输出:(本地字符串数组)

String [] EXPECTED_ARRAY = {"A", "B", "C", d};

提前致谢。 顺便说一句:数组,ArrayList 可以轻松做到这一点。有没有其他替代方法。

【问题讨论】:

  • ArrayList 是这样的方式...顺便说一句,在 JAVA 中,Strings 是不可变的...所以附加后对 D 值的任何更改...都不会反映在数组内容中!
  • 我不希望在创建新数组后反映值更改。谢谢。
  • 或者如果你想走得更远,那么你每次都需要创建一个新数组,我猜你会想远离

标签: java arrays string


【解决方案1】:

还有其他替代方法吗?

如果要向数组中添加一个元素(具有固定大小),可以将 arraycopy 设置为 ArrayList 在内部进行:

System.arraycopy(src, srcPos, dest, destPos, length);

如果您确切知道结果数组的长度,或者为动态元素分配更多空间:

String[] array = new String[EXPECTED_SIZE];

但这并不聪明,因为 ArrayList 类已经存在正是为了这些目的。

【讨论】:

  • 没有其他简单的方法。除非有特殊需要,否则没有人会更喜欢 arrayCopy。至少在这种情况下,您的答案是正确的。所以标记为接受的答案。谢谢。
【解决方案2】:

您可以创建自己的方法,如下所示

String [] EXPECTED_ARRAY = append(ARRAY, d);


String[] append(String a[],String str){
    String[] b=new String[a.length+1];
    int i=0;
    for(;i<a.length;i++)
       b[i]=a[i];
    b[i]=str;
    return b;        
}

【讨论】:

    【解决方案3】:

    在这里使用正则表达式不是一件好事。使用标准方法:

    static final String [] ARRAY = {"A","B","C"};
    public static void main(String[] args) throws Exception
    {
    
        String d = "D"; // could be changing dynamically.
        List<String> l = new ArrayList<>(Arrays.asList(ARRAY));
        l.add(d); // can add multiple dynamic values.
        String[] arr = l.toArray(new String[l.size()]);
        System.out.println(Arrays.toString(arr));
    }
    

    方法-2:

    String[] arr2 = new String[ARRAY.length + 1];
    System.arraycopy(ARRAY, 0, arr2, 0, ARRAY.length);
    arr2[arr2.length - 1 ] = d;
    System.out.println(Arrays.toString(arr2));
    

    O/P:

    [A, B, C, D]
    

    【讨论】:

      【解决方案4】:

      你可以试试这个方法。

      String strs[] = {"A","B","C"};
      List<String> tempList = new ArrayList<>(Arrays.asList(strs));
      tempList.add("D");
      strs = tempList.toArray(new String[tempList.size()]);
      

      如果你想为此做一个方法。

      private static String[] appendArray(String[] sts, String s)
      {
          List<String> tempList = new ArrayList<>(Arrays.asList(sts));
          tempList.add(s);
          return (tempList.toArray(new String[tempList.size()]));
      }
      

      如果你想在一次调用中使用多个字符串。

      private static String[] appendArray(String[] sts, String...s)
      {
          List<String> tempList = new ArrayList<>(Arrays.asList(sts));
          if (s.length>0) tempList.addAll(Arrays.asList(s));
          return (tempList.toArray(new String[tempList.size()]));
      }
      

      【讨论】:

        【解决方案5】:

        简单的方法是将值复制到一个新数组中!

        static final String[] ARRAY = {"A", "B", "C"};
        
        public static void main(String[] args) {
            String[] EXPECTED_ARRAY = getExpectedArray("D", ARRAY);
            System.out.println(Arrays.toString(EXPECTED_ARRAY));
        }
        
        static String[] getExpectedArray(String addValue, String ... strings) {
            String [] returnArray = new String[strings.length + 1];
            returnArray[returnArray.length - 1] = addValue;
            System.arraycopy(strings, 0, returnArray, 0, strings.length);
            return returnArray;
        }
        

        或使用 BeanShell 的最小行代码:

        static final String[] ARRAY = {"A", "B", "C"};
        
        public static void main(String[] args) throws Exception {
            String stringToAppend = "D";
        
            Interpreter interpreter = new Interpreter();
            String[] newArrayString = (String[]) interpreter.eval("new String [] {"
                    + Arrays.toString(ARRAY).replaceAll("^\\[|\\]$", "\"")
                            .replaceAll(",", "\",\"")
                    + ",\"" + stringToAppend + "\"" + "}");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-25
          • 2016-08-10
          • 2011-08-20
          • 2013-08-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多