拆分字符串并修剪每个元素

时间:2011-11-02 20:51:41

标签: java

是否有任何库API或正则表达式模式在某个分隔符上拆分String并自动修剪每个元素的前导和尾随空格而不必循环元素?

例如,在" A B # C#D# E # "上拆分#时,所需的输出为[A B,C,D,E]

我最接近的是str.split("\\s*#\\s*"),其中[ A B, C, D, E]

5 个答案:

答案 0 :(得分:45)

在拆分之前修剪它

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

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

的方式

答案 1 :(得分:11)

番石榴来救援!使用CharMatcherSplitter。我只使用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”]