2010-01-23 316 views
3
public static String[] removeString (String[] original) { 
    String[] newString; 
    List<String> list = new ArrayList<String>(Arrays.asList(original)); 

    list.remove(0); 
    newString = list.toArray(original); 
    return newString; 
} 

我想使用上面的代码从字符串数组中删除第一个字符串;然而,似乎虽然我成功从数组中删除了第一个字符串,但我还是将数组中的最后一个字符串设置为null。我怎样才能使阵列本身更短?从字符串数组中删除空字符串

+0

近评论我所知道的,该代码应该工作...也许使用引用数组列表,而不是直接的List接口。 – 2010-01-23 22:33:35

+0

这很奇怪...我的其他评论去了哪里? *划痕头* – 2010-01-23 22:57:32

+0

@Alcon:失去元?因为这个问题首先在那里发布。我的答案在那里丢失: -/ – 2010-01-23 23:16:28

回答

4

更改您的倒数第二,一个线:

NewString = list.toArray(new String[list.size()]); 

toArray(..)方法将作为一个参数,它试图以填补列表数据的列表。您正在传递一个长度为3的列表,因此最后一个元素保持为空。根据我的建议,您可以使用列表的新大小创建一个新阵列。

作为旁注:我建议您重新访问您的命名约定。根据recommended naming conventions您的方法和变量名称应以小写字母开头

更新:但您最好使用其他人建议的Arrays.copyOfRange(..)

+0

谢谢!这很好。 谢谢你告诉我aobut的命名约定太:) – wrongusername 2010-01-23 22:56:47

+0

我可以问你为什么使用数组? – 2010-01-23 23:08:19

+0

问这个问题下面的问题,因此它更有可能被作者看到。虽然,这个问题不太相关:) – Bozho 2010-01-23 23:11:19

4

你会想要使用java.util.ArraysT[] copyOfRange(T[] original, int from, int to)method

public static String[] RemoveString (String[] Original) { 
    return Arrays.copyOfRange(original, 1, original.length); 
} 
+0

谢谢...那工作太:) – wrongusername 2010-01-23 23:03:18

+0

(+1)确实,一个优雅的解决方案 – Bozho 2010-01-23 23:07:11

+0

只是一个注意任何想要使用copyOfRange的人:这个方法从Java 1.6开始就可用。 – sateesh 2010-01-24 08:06:57

0

问题是,因为你的新数组比旧数组小,新数组被复制到旧数组中。其余的字段然后填充null。这是丑陋的,但会解决你的问题:

public static String[] RemoveString (String[] Original) { 
    List<String> list = new ArrayList<String>(Arrays.asList(Original)); 

    list.remove(0); 
    return list.toArray(new String[0]); 
} 

编辑 或者做什么Bozho说,他的代码是更好的。

编辑2种 变化,以适应下面

+0

你怎么知道原件比一个长?为什么它不能有长度1?你的代码会返回一个大小为1的数组,这显然是不正确的。为什么不传递一个新的String [0] toArray()? – meriton 2010-01-23 22:59:50

+0

我觉得很蠢,你说得对。我停止思考第一个解决方案。 – ddccffvv 2010-01-23 23:31:38