我正在开发一个项目,要求我有一个数组的字符串表示。问题是这个重复的代码,我确信可以用某种方式重构,但我还没有找到。
private static String printDoubleArray(String title, double[] array){
String result = title;
for (double d : array) {
result += d + " ";
}
return result;
}
private static String printIntArray(String title, int[] array){
String result = title;
for (int d : array) {
result += d + " ";
}
return result;
}
提前致谢。
答案 0 :(得分:4)
您可以使用允许访问阵列任何时间元素的java.lang.reflect.Array
。请参阅get(arr, index)
,getLength(arr)
等。
答案 1 :(得分:2)
您的问题的解决方案是:
public class Test {
public static String numberArrayToString(Number[] arr) {
if ( arr == null ) return "";
StringBuilder sb = new StringBuilder();
for ( Number n : arr) {
sb.append(n.toString()).append(" ");
}
return sb.toString();
}
public static void main(String[] args) {
Integer[] intArr = { 1, 4, 6, 7 };
Double[] dblArr = { 33.44, 55.66, 11.22 };
System.out.println(numberArrayToString(intArr));
System.out.println(numberArrayToString(dblArr));
}
}
它产生了这个:
1 4 6 7
33.44 55.66 11.22
但是,它只适用于使用盒装基元(即Number
的子类)定义数组,但不能使用基元(即int[]
和double[]
)定义数组。
问题在于使用盒装基元效率非常低。
答案 2 :(得分:2)
为什么不使用java.util
package中的Arrays.toString(...)
方法之一?
int[] intArray = {1, 2, 4};
double[] doubleArray = {1.1, 2.2, 4.4};
System.out.println(Arrays.toString(intArray));
System.out.println(Arrays.toString(doubleArray));
答案 3 :(得分:2)
我会使用commons-lang创建字符串,使用Object[]
数组创建print方法
int[] intArray = ...;
String str = printArray(title, ArrayUtils.toObject(intArray));
double[] doubleArray = ...;
String str = printArray(title, ArrayUtils.toObject(doubleArray));
public static void printArray(String title, Object[] array) {
return title + " " + StringUtils.join(array, " ");
}
注意,这内部将复制一个数组,该数组将int整理成Integer对象,所以如果数组的性能/大小是一个问题,我会咬住子弹并为原始类型创建方法,尽管我会调用所有的方法printArray
并用不同的类型重载它。
编辑:
而不是commons-lang,你可以使用Guava基元,它不会复制数组(但只会自动放映列表中的浮点数),所以你可以这样做:
int[] intArray = ...;
String str = printArray(title, Ints.asList(intArray));
double[] doubleArray = ...;
String str = printArray(title, Floats.asList(doubleArray));
答案 4 :(得分:1)
使用guava,您可以使用Ints将原始数组(int [])转换为包装类型(List)的List。此外,您可以使用Joiner。
Joiner.on(' ').join(Ints.asList(new int[]{1,2,3}));
方法是:
void printIntArray(String title, int[] array) {
printArray(title, Ints.asList(array));
}
String printArray(String title, Iterable<? extends Number> asList){
return title + " " + Joiner.on(' ').join(asList);
}
答案 5 :(得分:0)
您可以使用包装类Integer和Double代替int和double。使用基类Number
编写一个方法