次のような文字列があります: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
を作成できることはわかっていますが、すぐに作成したいと思います。
分割には正規表現\s*,\s*
を使用します。
String result[] = attributes.split("\\s*,\\s*");
初期および末尾の空白の場合
以前のソリューションでは、最初の空白と末尾の空白が残っています。したがって、それらのいずれかを期待している場合は、次のソリューションを使用して同じものを削除できます。
String result[] = attributes.trim().split("\\s*,\\s*");
Java 8を使用すると、このように1行で実行できます。
String[] result = Arrays.stream(attributes.split(",")).map(String::trim).toArray(String[]::new);
コンマの間にテキストがない場合、次の式は空の要素を作成しません。
String result[] = attributes.trim().split("\\s*,+\\s*,*\\s*");
String result[] = attributes.trim().split("\\s*,[,\\s]*");
以前にここに投稿: https://blog.oio.de/2012/08/23/split-comma-separated-strings-in-Java/
コンマとスペースで分割する場合はどうですか:
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;