5

如何在没有尾随/前导空格或空值的情况下使用 String.split() 拆分字符串?

假设我有字符串,例如" ol-ga@assf-rrt.ru ; sdf.an@dfgdfg.com; sdfsdf@fdfd.erff, privet@vvv.fff ".

我曾经通过调用来拆分它,String.split("[;, ]+")但缺点是你会得到需要在额外循环中忽略的空数组元素。

我还尝试String.split("\\s*[;,]+\\s*")了不提供空元素但在第一封电子邮件中保留前导空格并在最后一封电子邮件中保留尾随空格的方法,以便生成的数组看起来像因为这些电子邮件旁边没有逗号或分号:

[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  "

是否可以仅使用正则表达式和拆分(不使用对 String.trim() 的额外调用)来获取“干净”电子邮件的数组?

谢谢!

4

5 回答 5

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("[;,]+");

我假设你很确定你的输入字符串只包含电子邮件地址,只需要修剪/重新格式化。

于 2012-04-13T20:13:14.423 回答
3

像这样:

String.split("\\s*(;|,|\\s+)\\s*");

但它在开头给出了一个空字符串(无法仅使用拆分来摆脱它)。

因此,只有这样的事情才能有所帮助:

String.trim().split("\\s*(;|,)\\s*");
于 2012-04-13T20:10:06.933 回答
3

只是把它扔在那里:如果你使用 Guava,Splitter这会比使用正则表达式更简单。

Iterable<String> splitStrings = Splitter
 .onPattern("[;,]+")
 .trimResults()
 .split(string);
于 2012-04-13T21:21:04.963 回答
1

尝试String.trim()在拆分结果中使用

于 2012-04-13T20:09:51.370 回答
0

首先,正如 DGomez 指出的那样:

 String.trim()

在输入字符串中使用它,这样前导和尾随空格就消失了。

现在,使用这个正则表达式来拆分电子邮件:

 String.split("[,;]+\\s*")

我认为应该这样做。

于 2012-04-13T20:12:07.733 回答