2010-02-04 112 views
0

假设你有已创建后.split()然后使你有一大堆的空字符串在里面,即的java:删除元素从后阵.split()

myArray['','hello','thetimes','economist','','','hi'] 

一个String[]是否有一个方式从String[]删除他们而不必循环,检测字符串是否为空然后添加到新的数组?

回答

3

有一种方法以从 字符串[]删除它们,而无需循环圆形, 检测是否字符串是空的,则 添加到新的数组?

编号数组具有固定长度。

8

这里有一个更简单的方法。

String.split("\\s+")将消除这些空字符串。

+0

你不能调用'.split()'在'的String []'。我已经将我的数组拆分为某个字符串,例如'String [] hello = someString.split('abc');',我不能在''hello []''上执行'.split() 。或者..也许我误解了你? – Federer 2010-02-04 14:41:54

+1

@theEconomist:不,你调用'String'本身的'.split()'。正则表达式参数指示要分割的模式。我命名的特定模式匹配“一个或多个空白字符”,这消除了结果数组中的空字符串。 – danben 2010-02-04 15:23:22

+0

@theEconomist:另外,如果你正在分裂多于空白,你可以扩展你的正则表达式来包含周围的空白。例如'someString。split('abc')'会变成'someString.split(\\ s * abc \\ s *)'。 – danben 2010-02-04 15:26:50

0

将它转换为List可能是最简单的,遍历它并除去空的元素,例如

List<String> parts = new LinkedList<String>(string.split(pattern)); 
for (Iterator<String> it = parts.iterator(); 
    it.hasNext(); 
    ) { 
    if (it.next().isEmpty()) { 
     it.remove(); 
    } 
} 
return parts.toArray(new String[parts.size()]); 
+0

拆分后不会有空字符串! – fastcodejava 2010-02-04 15:10:51

0
String[] parts = string.split("\\s*" + splitString + "\\s*"); 

splitString是你原本分裂的字符串。

这扩展了拆分字符串,将任意的空格数加到它上面,以便它们作为拆分器的一部分实现,而不是作为结果数组的一部分。

0

真正的问题是在你正在做分割的正则表达式字符串中。看看here列表中的特殊符号添加像其他人一样建议,如\\s

如果您想要学习比正则表达式更简单的路线,您可以遍历数组并将每个非空字符串添加到ArrayList<String>,然后将其更改回固定大小的数组。

0

没有简单的方法从阵列中删除元素。你可以做replaceAll(),然后拨打split或拨打split("\\s+")多个空间。

1

该解决方案仅解决问题的一部分 - 只删除尾随的空字符串。 我用:

String st = "a,b,c,,d,,f,,,"; 
List<String> list = Arrays.asList(st.split("\\s*,\\s*")); 
while (list.remove("")); 
2

这里是正确的魔道:

String str = "1, 2,3 4,, , ,5,,6, ,"; 
String arr[] = str.split("(\\s*,\\s*)+"); 
+0

输出的例子会很有帮助。 – Trevor 2014-10-10 20:55:36