如何使用String.split()分割字符串而不使用尾随/前导空格或空值?
假设我有" ol-ga@assf-rrt.ru ; sdf.an@dfgdfg.com; sdfsdf@fdfd.erff, privet@vvv.fff "
等字符串。
我曾经通过调用String.split("[;, ]+")
来拆分它,但缺点是你得到了额外循环中需要忽略的空数组元素。
我还尝试了String.split("\\s*[;,]+\\s*")
,它没有提供空元素,但在最后一封电子邮件和最后一封电子邮件的尾随空格中留下了前导空格,因此生成的数组看起来像是因为这些电子邮件旁边没有逗号或分号: / p>
[0] = {java.lang.String@97}" ol-ga@assf-rrt.ru"
[1] = {java.lang.String@98}"sdf.an@dfgdfg.com"
[2] = {java.lang.String@99}"sdfsdf@fdfd.erff"
[3] = {java.lang.String@100}"privet@vvv.fff "
是否可以仅使用正则表达式和Split (不使用对String.trim()的额外调用)来获取“干净”电子邮件数组?
谢谢!
答案 0 :(得分:6)
String input = " ol-ga@assf-rrt.ru ; sdf.an@dfgdfg.com; sdfsdf@fdfd.erff, privet@vvv.fff ";
input = input.replace(" ", "");
String[] emailList = input.split("[;,]+");
我假设您非常确定您的输入字符串只包含电子邮件地址,只需要修剪/重新格式化。
答案 1 :(得分:3)
像这样:
String.split("\\s*(;|,|\\s+)\\s*");
但是它在开头就给出了一个空字符串(没有办法只使用拆分来摆脱它)。
因此,只有这样的事情可以帮助:
String.trim().split("\\s*(;|,)\\s*");
答案 2 :(得分:3)
把它扔出去:如果你使用Guava,Splitter
使这比使用正则表达式更简单。
Iterable<String> splitStrings = Splitter
.onPattern("[;,]+")
.trimResults()
.split(string);
答案 3 :(得分:1)
尝试在分割结果中使用String.trim()
答案 4 :(得分:0)
首先,正如DGomez所指出的那样:
String.trim()
在输入字符串中使用它,因此前导空格和尾随空格都消失了。
现在,使用此正则表达式来分割电子邮件:
String.split("[,;]+\\s*")
我认为应该这样做。