拆分string并修剪每个元素

是否有任何库API或正则expression式模式来分割一个string在一些分隔符,并自动修剪每个元素的前导和尾随空间,而不必循环的元素?

例如,在" AB # C#D# E # "上分割" AB # C#D# E # " ,所需的输出是[AB,C,D,E]

我得到的最接近的是str.split("\\s*#\\s*") ,它给出了[ AB, C, D, E]

在分裂之前修剪它

 " AB # C#D# E # ".trim().split("\\s*#\\s*") 

[ AB, C, D, E]中的逗号后面的空格就是Arrays.toString打印的方式

番石榴来拯救! 使用CharMatcher和分配器 。 我使用Joiner只是将Iterable缝合在一起,清楚地表明迭代器中只有字母,没有填充,无关的空格或散列符号。

 package main; import com.google.common.base.CharMatcher; import com.google.common.base.Joiner; import com.google.common.base.Splitter; public class TestMain { static Splitter split = Splitter.on(CharMatcher.anyOf(" #")).trimResults() .omitEmptyStrings(); static Joiner join = Joiner.on(", "); public static void main(String[] args) { final String test = " AB # C#D# E # "; System.out.println(join.join(split.split(test))); } } 

输出:

 A, B, C, D, E 

非常适合那些因为正则expression而头痛的人。

那么在拆分前做一个replace呢?

 str.replaceall("\\s*#\\s*","#").split() 

编辑纠正Marcus指出的空格错误。

我认为正确的正则expression式应该是[\ s] *#[\ s] *:

 str.split("[\\s]*#[\\s]*"); 

testing: http : //regexpal.com/

没有正则expression式应该看起来像这样:

 " AB # C#D# E # " .split('#') .map(function(item) { return item.trim(); } ) .filter(function(n){ return n != "" }); 

输出:[“AB”,“C”,“D”,“E”]