假设你有已创建后.split()
然后使你有一大堆的空字符串在里面,即的java:删除元素从后阵.split()
myArray['','hello','thetimes','economist','','','hi']
一个String[]
是否有一个方式从String[]
删除他们而不必循环,检测字符串是否为空然后添加到新的数组?
假设你有已创建后.split()
然后使你有一大堆的空字符串在里面,即的java:删除元素从后阵.split()
myArray['','hello','thetimes','economist','','','hi']
一个String[]
是否有一个方式从String[]
删除他们而不必循环,检测字符串是否为空然后添加到新的数组?
有一种方法以从 字符串[]删除它们,而无需循环圆形, 检测是否字符串是空的,则 添加到新的数组?
编号数组具有固定长度。
这里有一个更简单的方法。
String.split("\\s+")
将消除这些空字符串。
将它转换为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()]);
拆分后不会有空字符串! – fastcodejava 2010-02-04 15:10:51
String[] parts = string.split("\\s*" + splitString + "\\s*");
凡splitString
是你原本分裂的字符串。
这扩展了拆分字符串,将任意的空格数加到它上面,以便它们作为拆分器的一部分实现,而不是作为结果数组的一部分。
真正的问题是在你正在做分割的正则表达式字符串中。看看here列表中的特殊符号添加像其他人一样建议,如\\s
。
如果您想要学习比正则表达式更简单的路线,您可以遍历数组并将每个非空字符串添加到ArrayList<String>
,然后将其更改回固定大小的数组。
没有简单的方法从阵列中删除元素。你可以做replaceAll()
,然后拨打split
或拨打split("\\s+")
多个空间。
该解决方案仅解决问题的一部分 - 只删除尾随的空字符串。 我用:
String st = "a,b,c,,d,,f,,,";
List<String> list = Arrays.asList(st.split("\\s*,\\s*"));
while (list.remove(""));
这里是正确的魔道:
String str = "1, 2,3 4,, , ,5,,6, ,";
String arr[] = str.split("(\\s*,\\s*)+");
输出的例子会很有帮助。 – Trevor 2014-10-10 20:55:36
你不能调用'.split()'在'的String []'。我已经将我的数组拆分为某个字符串,例如'String [] hello = someString.split('abc');',我不能在''hello []''上执行'.split() 。或者..也许我误解了你? – Federer 2010-02-04 14:41:54
@theEconomist:不,你调用'String'本身的'.split()'。正则表达式参数指示要分割的模式。我命名的特定模式匹配“一个或多个空白字符”,这消除了结果数组中的空字符串。 – danben 2010-02-04 15:23:22
@theEconomist:另外,如果你正在分裂多于空白,你可以扩展你的正则表达式来包含周围的空白。例如'someString。split('abc')'会变成'someString.split(\\ s * abc \\ s *)'。 – danben 2010-02-04 15:26:50