拆分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”]