私は文字列を持ってList
います。これをCSVに変換するJavaの便利な方法はありますか?したがって、「test1、test2、test3」は、「test1」、「test2」、「test3」を含むリスト3文字列要素の変換の結果です。List
String
自分でメソッドを記述して変換することもできますが、これはすでにAPIString
によって実装されているのでしょうか。
Apache Commons Langには、まさにこの目的のためのStringUtils.join()メソッドが含まれています。異なるフレーバーが存在することに注意してください。
そして 2014 年 3 月の時点で、Java 8 にはStringJoinerが追加されました。
この種の String を簡単に作成できるJoinerというGuava クラスがあります。
行うJoiner.on(",").join(yourStrings)
この簡単な方法を書きました。
String listToCsv(List<String> listOfStrings, char separator) {
StringBuilder sb = new StringBuilder();
// all but last
for(int i = 0; i < listOfStrings.size() - 1 ; i++) {
sb.append(listOfStrings.get(i));
sb.append(separator);
}
// last string, no separator
if(listOfStrings.size() > 0){
sb.append(listOfStrings.get(listOfStrings.size()-1));
}
return sb.toString();
}
にはいくつかの便利なメソッドがありorg.springframework.util.StringUtils
ます。
例:
String text = StringUtils.arrayToCommaDelimitedString(new Object[]{"test1", "test2", "test3"});
詳細: http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/util/StringUtils.html
コアJavaのみを使用したい場合は、次を使用できると思います。
java.util.Arrays.toString(list.toArray(new String[list.size()]).replace("[", "\"").replace("]", "\"");
警告: このすべてのケースを確認したわけではありません。;)
Arrays.toString は次のようなものを生成します
[a], [b], [c]
リストに含まれている場合a, b, c
ここでは、カンマで区切られているという事実を利用して、角括弧を削除し"
、データ内にカンマがある場合に置き換えます。これが必要ない場合は、ただ行うことができますreplace("[", ""
public class StringUtil {
public String toCsv(final List<?> list) {
return toString(list, ',');
}
public String toString(final List<?> list, char delimiter) {
final StringBuilder b = new StringBuilder();
if (list != null) {
for (int i = 0; i < list.size(); i++) {
b.append(list.get(i).toString());
if (i != list.size() - 1) {
b.append(delimiter);
}
}
}
return b.toString();
}
}
いいえ、JDK で利用できる便利な方法はありません。独自のものを作成することもできますが、一般的なケースでは、これは見た目ほど簡単ではありません (たとえば、フィールドに区切り文字、改行文字、またはテキスト区切り文字が含まれている場合):
例:
String[] fields = { "\n", ""he said \"hello\"", "," }
これを与える必要があります:
"
","he said ""hello""",","
編集: これは CSV の提案されたRFC です。
EDIT2: 誰かが実装に興味がある場合は、コメントを残してください。自宅のハードディスクに 1 つ待っています。
これが私がしていることです
@Test
public void testString(){
List<String> listOfWords = Arrays.asList("Some","Other","lalala");
final String fields = listOfWords.stream().reduce((t, u) -> t + "," + u).get();
System.out.println("Look "+fields);
}
このコードを使用
public static String listToString(List list) {
int len = list.size();
int last = len - 1;
StringBuffer sb = new StringBuffer(2 * (len + 1));
sb.append('{');
for (int i = 0; i < len; i++) {
sb.append(list.get(i));
if (i != last) {
sb.append(',');
}
}
sb.append('}');
return sb.toString();
}