我有一个字符串,我试图将其转换为列表,但是得到了空条目。
",A,B,C,D, ,,,"
returns
[, A, B, C, D, , , ,]
我想移除所有的“空”逗号:
[A, B, C, D]
我正在努力。
current.split(",+\\s?")
哪个正则表达式可以代替我当前使用的正则表达式,因为它无法产生我想要的结果?
我有一个字符串,我试图将其转换为列表,但是得到了空条目。
",A,B,C,D, ,,,"
returns
[, A, B, C, D, , , ,]
我想移除所有的“空”逗号:
[A, B, C, D]
我正在努力。
current.split(",+\\s?")
哪个正则表达式可以代替我当前使用的正则表达式,因为它无法产生我想要的结果?
你需要两个步骤,但只需一行代码:
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]
(,\s*)+
current.split("(?:,\\s*)+")
Splitter.on(',').omitEmptyStrings().trimResults().split(",A,B,C,D, ,,,");
我发现这比正则表达式更容易阅读。
匹配除逗号和空格之外的任何字符很可能是一个更简洁的解决方案:
/[^, ]+/g
",A,B,C,D, ,,,".match(/[^, ]+/g)
// → ["A", "B", "C", "D"]
_.words
方法(感谢他们提供上面的正则表达式):
_.words('fred, barney, & pebbles', /[^, ]+/g);
// → ['fred', 'barney', '&', 'pebbles']