我需要将动态字符串值附加到具有已知值的新字符串数组。
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};
提前致谢。 BTW:Arrays,ArrayList可以很容易地做到这一点。还有其他替代方法。
答案 0 :(得分:2)
还有其他替代方法吗?
如果要向数组中添加元素(具有固定大小),可以在arraycopy
内部ArrayList
进行内容:
System.arraycopy(src, srcPos, dest, destPos, length);
或者为动态元素分配更多空间,如果您确切知道结果数组的长度:
String[] array = new String[EXPECTED_SIZE];
但它并不聪明,因为ArrayList
类已经存在完全用于这些目的。
答案 1 :(得分:1)
您可以创建自己的方法,如下面的
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;
}
答案 2 :(得分:0)
正则表达式在这里使用并不是一件好事。使用标准方法:
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]
答案 3 :(得分:0)
简单的方法是将值复制到新数组!
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 + "\"" + "}");
}
答案 4 :(得分:0)
你可以这样试试。
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()]));
}