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*");

ただし、最初は空の文字列になります(splitのみを使用して文字列を削除する方法はありません)。

したがって、このようなものだけが役立ちます:

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 に答える