您好我编写了这个类来添加到字符串数组并从中删除元素。我还做了一个为写入csv文件准备一组值。但是,我想这样做,以便它将接受任何值(对于前两个方法,因为最后一个将始终是一个字符串)我如何使它通用所以? ps我知道我不应该为csv构建器发送两个维度参数,但我现在只知道如何获取行维度。:)
public class ManipulateList {
public static String [] removeFromArray(String []old_array,int index) {
String []old_vals = old_array;
int old_length= old_vals.length;
int new_length= old_length-1;
String[] new_vals = new String[new_length];
System.arraycopy(old_vals, 0, new_vals, 0, index);
if(index+1!=old_length) {
System.arraycopy(old_vals, index+1, new_vals,index,old_length-1-index);
}
return new_vals;
}
public static String[] addToArray(String []old_array,String element) {
String new_element=element;
String[] old_vals = old_array;
int old_length= old_vals.length;
int new_length= old_length+1;
String[] new_vals = new String[new_length];
System.arraycopy(old_vals, 0, new_vals, 0, old_length);
new_vals[old_length]=new_element;
return new_vals;
}
public static String[] createCsvList(String[][] lists, int contents1,int contents2){
String[][] csvarray=new String[contents1][contents2];
csvarray = lists;
String[]newcsv=new String[contents2];
StringBuilder newline = new StringBuilder();
for (int i = 0; i<contents2;i++) {
for (int j = 0; j<contents1;j++) {
newline.append(csvarray[j][i]);
if(contents1-j>1) {
newline.append(",");
}
}
newcsv[i]=newline.toString();
newline= new StringBuilder();
}
return newcsv;
}
}
答案 0 :(得分:3)
差不多,用T []替换String [],你已经完成了。
这是第一个。您会注意到我大多只是将String[]
替换为T[]
并将<T>
添加到方法签名中。
public static <T> T[] removeFromArray(T[] old_array,int index)
{
T[] old_vals = old_array;
int old_length = old_vals.Length;
int new_length = old_length - 1;
@SuppressWarnings("unchecked") T[] new_vals = (T[]) Array.newInstance(old_array.getClass().getComponentType(), new_length);
System.arraycopy(old_vals, 0, new_vals, 0, index);
if(index + 1 != old_length)
{
System.arraycopy(old_vals, index+1, new_vals, index,old_length - 1 - index);
}
return new_vals;
}
编辑:
显然,要创建一个新数组,必须这样做:
public T[] createArray(Class<T> cls, int size) throws Exception
{
@SuppressWarnings("unchecked") T[] array = (T[])Array.newInstance(cls, size);
return array;
}
答案 1 :(得分:1)
最好使用List,或者更好的是,使用包含List的对象,而不是String []。然后,您不必编写自己的方法来向数组添加元素。
如果你真的想出于某种原因使用数组,这很难,因为以下是非法的:
T[] myNewList = new T[];
编译器在运行时没有信息来知道调用方法时的T是什么(由于类型擦除)。您可以通过各种方式伪造它,例如使用ArrayList.toArray(),但我只是完全避免问题并使用Lists,如上所述。
然而,对于CSV,我不知道为什么除了Strings之外你还想要什么。 CSV文件实际上是字符串列表的列表。