是否有任何库API或正则表达式模式在某个分隔符上拆分String并自动修剪每个元素的前导和尾随空格而不必循环元素?
例如,在" A B # C#D# E # "
上拆分#
时,所需的输出为[A B,C,D,E]
我最接近的是str.split("\\s*#\\s*")
,其中[ A B, C, D, E]
答案 0 :(得分:45)
在拆分之前修剪它
" A B # C#D# E # ".trim().split("\\s*#\\s*")
[ A B, C, D, E]
中逗号后面的空格就是Arrays.toString
打印
答案 1 :(得分:11)
番石榴来救援!使用CharMatcher和Splitter。我只使用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 = " A B # C#D# E # ";
System.out.println(join.join(split.split(test)));
}
}
输出:
A, B, C, D, E
非常适合那些因正则表达而头疼的人。
答案 2 :(得分:3)
在拆分之前做一次替换是怎么回事?
str.replaceall("\\s*#\\s*","#").split()
答案 3 :(得分:1)
编辑以纠正Marcus指出的空白错误。
我认为正确的正则表达式应该是[\ s] *#[\ s] *:
str.split("[\\s]*#[\\s]*");
经过测试:http://regexpal.com/
答案 4 :(得分:-1)
如果没有正则表达式,它应该是这样的:
" A B # C#D# E # "
.split('#')
.map(function(item) { return item.trim(); } )
.filter(function(n){ return n != "" });
输出: [“A B”,“C”,“D”,“E”]