gpt4 book ai didi

java - 使用 Arrays.copyOf 复制不同类型的数组时出现问题

转载 作者:行者123 更新时间:2023-12-03 18:11:47 25 4
gpt4 key购买 nike

我正在尝试创建一个方法,它几乎可以将任何东西作为参数,并返回一个带有一些分隔符的值的串联字符串表示形式。

public static String getConcatenated(char delim, Object ...names) {
String[] stringArray = Arrays.copyOf(names, names.length, String[].class); //Exception here
return getConcatenated(delim, stringArray);
}

和实际的方法

public static String getConcatenated(char delim, String ... names) {
if(names == null || names.length == 0)
return "";

StringBuilder sb = new StringBuilder();

for(int i = 0; i < names.length; i++) {
String n = names[i];
if(n != null) {
sb.append(n.trim());
sb.append(delim);
}
}

//Remove the last delim
return sb.substring(0, sb.length()-1).toString();
}

我有以下 JUnit 测试:

final String two = RedpillLinproUtils.getConcatenated(' ', "Shervin", "Asgari");
Assert.assertEquals("Result", "Shervin Asgari", two); //OK

final String three = RedpillLinproUtils.getConcatenated(';', "Shervin", "Asgari");
Assert.assertEquals("Result", "Shervin;Asgari", three); //OK

final String four = RedpillLinproUtils.getConcatenated(';', "Shervin", null, "Asgari", null);
Assert.assertEquals("Result", "Shervin;Asgari", four); //OK

final String five = RedpillLinproUtils.getConcatenated('/', 1, 2, null, 3, 4);
Assert.assertEquals("Result", "1/2/3/4", five); //FAIL

但是,测试在最后一部分失败了,除了:

java.lang.ArrayStoreException
在 java.lang.System.arraycopy( native 方法)
在 java.util.Arrays.copyOf(Arrays.java:2763)

有人能发现错误吗?

最佳答案

因为你不能在 String[] 数组中存储,比如 Integers,所以你无法将一个对象数组复制到一个数组中字符串。您必须以某种方式在每个对象上通过 .toString()

这个解决方案例如可以工作:

public static String concat(char delim, Object... objs) {
if (objs == null || objs.length == 0) return "";
StringBuilder sb = new StringBuilder();
for (Object o : objs)
sb.append(delim).append(o);
return sb.substring(1);
}

作为可变参数的旁注;我怀疑您是否需要检查 objs == null。编译器会将 concat(",", "a", "b", "c") 的调用转换为 concat(",", new Object[] {"a", "b", "c"),因此我看不出 objs 怎么可能等于 null。 -->

关于java - 使用 Arrays.copyOf 复制不同类型的数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2882350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com