我有一个字符串,我正试图变成一个列表,但我得到空条目。
",A,B,C,D, ,,,"
returns
[, A, B, C, D, , , ,]
我想删除所有“空”逗号:
[A, B, C, D]
我正在尝试
current.split(",+\\s?")
不会产生我想要的结果。我应该使用什么正则表达式?
答案 0 :(得分:15)
您需要两个步骤,但只需要一行:
String[] values = input.replaceAll("^[,\\s]+", "").split("[,\\s]+");
对replaceAll()
的调用会删除前导分隔符
拆分是在任意数量的分隔符上完成的。
split()
的行为意味着忽略尾随空白值,因此在拆分之前无需修剪尾随分隔符。
这是一个测试:
public static void main(String[] args) throws Exception {
String input = ",A,B,C,D, ,,,";
String[] values = input.replaceAll("^[,\\s]+", "").split("[,\\s]+");
System.out.println(Arrays.toString(values));
}
输出:
[A, B, C, D]
答案 1 :(得分:3)
您不仅希望在匹配中包含接下来的几个空格,还要将连续的逗号分隔为一个单元:
(,\s*)+
current.split("(?:,\\s*)+")
答案 2 :(得分:2)
我会使用Splitter in Guava:
Splitter.on(',').omitEmptyStrings().trimResults().split(",A,B,C,D, ,,,");
因为我发现这比正则表达式更容易阅读。
答案 3 :(得分:0)
Matching any chars other than commas and spaces is likely to be a cleaner solution:
/[^, ]+/g
",A,B,C,D, ,,,".match(/[^, ]+/g)
// → ["A", "B", "C", "D"]
If you're working in Javascript you could also use the Lodash _.words
method (kudos to them for the above regex):
_.words('fred, barney, & pebbles', /[^, ]+/g);
// → ['fred', 'barney', '&', 'pebbles']