web-dev-qa-db-ja.com

Java-ワンショットで分割とトリム

次のような文字列があります:String attributes = " foo boo, faa baa, fii bii,"このような結果を取得したい:

String[] result = {"foo boo", "faa baa", "fii bii"};

だから私の問題は、私がすでに分割した1つのショットで分割とトリムを行う方法です:

String[] result = attributes.split(",");

しかし、spacesはまだ結果にあります:

String[] result = {" foo boo", " faa baa", " fii bii"};
                    ^           ^           ^

ループを作成し、すべてに対してtrimを作成できることはわかっていますが、すぐに作成したいと思います。

33
YCF_L

分割には正規表現\s*,\s*を使用します。

String result[] = attributes.split("\\s*,\\s*");

初期および末尾の空白の場合
以前のソリューションでは、最初の空白と末尾の空白が残っています。したがって、それらのいずれかを期待している場合は、次のソリューションを使用して同じものを削除できます。

String result[] = attributes.trim().split("\\s*,\\s*");
58
Raman Sahasi

Java 8を使用すると、このように1行で実行できます。

String[] result = Arrays.stream(attributes.split(",")).map(String::trim).toArray(String[]::new);
29
Andrei Olar

コンマの間にテキストがない場合、次の式は空の要素を作成しません。

String result[] = attributes.trim().split("\\s*,+\\s*,*\\s*");
2
Maxple
String result[] = attributes.trim().split("\\s*,[,\\s]*");

以前にここに投稿: https://blog.oio.de/2012/08/23/split-comma-separated-strings-in-Java/

0

コンマとスペースで分割する場合はどうですか:

String result[] = attributes.split(",\\s");

独自のカスタム関数を作成する

private static String[] split_and_trim_in_one_shot(String string){
 String[] result  = string.split(",");
 int array_length = result.length;

 for(int i =0; i < array_length ; i++){
  result[i]=result[i].trim();
 }
 return result;

カスタム区切り文字を考慮したオーバーロード

private static String[] split_and_trim_in_one_shot(String string, String delimiter){
 String[] result  = string.split(delimiter);
 int array_length = result.length;

 for(int i =0; i < array_length ; i++){
  result[i]=result[i].trim();
 }
 return result;
0
TimeTrax