String []をJavaでカンマ区切りの文字列に変換する


109

私は1つを持っている String[]

String[] name = {"amit", "rahul", "surya"};

IN句内のSQLクエリのパラメーターとして名前を送信したいので、フォーマットに変換する方法

'amit','rahul','surya'

18
String[] name = {"O'Neill"};
Bart Kiers

回答:


31
if (name.length > 0) {
    StringBuilder nameBuilder = new StringBuilder();

    for (String n : name) {
        nameBuilder.append("'").append(n.replace("'", "\\'")).append("',");
        // can also do the following
        // nameBuilder.append("'").append(n.replace("'", "''")).append("',");
    }

    nameBuilder.deleteCharAt(nameBuilder.length() - 1);

    return nameBuilder.toString();
} else {
    return "";
}

10
その後、私はチェックの束を書いたでしょう。すべてを保存する例を示すのではなく、概念を説明するだけです。
Nico Huysamen、2011

3
繰り返しますが、概念...そして、投票に感謝します。しかし、あなたはそれを修正しました。
Nico Huysamen、2011

バディに感謝します。私の日は節約できますが、よろしければ@Bart Kiersの答えも教えてください。私はその状況に遭遇する可能性があり、プログラミングplzに慣れていないためです
Deepak Kumar

7
ああ、単純にString.join(...)orを使用できるのに、なぜそれほど多くのソース行を書く必要があるのTextUtils.join(...)ですか?
Eugene Brusov 2017年

2
@EugeneBrusov答えはJava 8のリリースよりずっと前に2011年に投稿されたので、推測していきます;)
Nico Huysamen 2018

211

簡単なメソッドを自分で書くか、そこにあるさまざまなユーティリティのいずれかを使用します。

個人的には、Apache StringUtils(StringUtils.join)を使用しています

編集:Java 8では、これはもう必要ありません:

String joined = String.join(",", name);

3
丁度!あなたも、あなた自身の区切り文字を定義することができますStringUtils.join(names,',');
狂気

5
String list = "'" + StringUtils.join(names,"','") + "'";これにより、SQL要求で必要な単一引用符が得られます。
ヘイスクラーク2016

Androidの場合:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani



47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();

1
@Bmoeller試しましたTextUtils.join(...)か?1行のコードは5行のコードよりも優れており、シンプルだと思います。
Eugene Brusov 2017年

27

org.apache.commons.lang.StringUtilsAPIを使用して、Javaの文字列配列からコンマ区切りの結果を形成することもできます。

StringUtils.join(strArr,",");


9

依存関係として既にSpring Frameworkがある場合は、非常に単純なutilメソッドを使用することもできます。

org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)

7

Guavaライブラリを使用してそれを簡略化することもできます:

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";

出力が次の場所でGuavaライブラリを使用するにはどうすればよい"amit,rahul,surya"ですか?
Compaq LE2202x 2014

5

StringBuilderString []を使用して繰り返し、各Stringをそれに追加します。

public static String convert(String[] name) { 
    StringBuilder sb = new StringBuilder();
    for (String st : name) { 
        sb.append('\'').append(st).append('\'').append(',');
    }
    if (name.length != 0) sb.deleteCharAt(sb.length()-1);
    return sb.toString();
}

4

これは、1行のコードで実行できます。

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");

3
String[] name = {"amit", "rahul", "surya"};


public static String arrayToString(String array[])
{
    if (array.length == 0) return "";
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < array.length; ++i)
    {
        sb.append(",'").append(array[i]).append("'");
    }
    return sb.substring(1);
}

2
おそらくあなたは意味substring(1)しましたが、もしどうしたらarray.length == 0いいですか?
Bart Kiers、2011

2

私はこれを使います

public static String convertToCommaSeparated(String[] strings) {
    StringBuffer sb = new StringBuffer("");
    for (int i = 0; strings != null && i < strings.length; i++) {
        sb.append(strings[i]);
        if (i < strings.length - 1) {
            sb.append(',');
        }
    }
    return sb.toString();
}

1

USE StringUtils.join関数:例

String myCsvString = StringUtils.join(myList, ",")

1
以前に複数回投稿された回答を投稿するのはなぜですか?
Charles Goodwin、

1
String[] paramIdIdList={"P001","P002","P003"};

StringBuilder builder = new StringBuilder();
            for(String paramId : paramIdIdList) {
                builder.append(paramId+",");
            }
            builder.deleteCharAt(builder.length() -1);
            String paramIds = builder.toString();
System.Out.Println(paramIds );

コードが正確に何をしているかの説明を追加してください。
Hille

String []をコンマ区切りの文字列に変換
Vinayak

あなたの答えでは、正しいことがいくつかのコードがあることを知っているからです。それ以上でもそれ以下でもないが、それは助けにはならない。
Hille

1

コードが表示されるのと同じくらい魅力的で「かっこいい」ので、文字列の連結の問題の影響を受けるため、文字列の大きなコレクションを使用しfoldたりreduce使用したりしないください。

String[] strings = { "foo", "bar", "baz" };
Optional<String> result = Arrays.stream(strings)
        .reduce((a, b) -> String.format("%s,%s", a, b));
System.out.println(result.get());

代わりに、他の回答に従って、String.join()既にコレクションがある場合は使用し、StringBuilderそうでない場合はを使用してください。


0
String newNameList=null;

 for(int i = name.length;i>=0;i--){
    if(newNameList==null){
        newNameList = "\'" + name[name.length - i] + "\'";
    }
    else{
        newNameList += ",\'" + name[name.length - i] + "\'";
    }
}

0

そのような単純な操作のためにStringBuilderを生成しないようにすることもできます。コンテンツの整合性を保つために、配列の名前名前から名前に変更したことに注意してください。

String[] names = {"amit", "rahul", "surya"};

String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
    namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";

0

for()ループの垂直方向の間隔をあまり気にしない場合は、2行(宣言を除く。'finalstring 'は最初は空の文字列と等しいと宣言する必要があります):

for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);

2行で完了です。:)


0

以下は、配列を分割してカスタム区切り文字を配置するユーティリティメソッドです。

String.replace(String,String)
Arrays.toString(Object[])

ここにあります :

public static String toString(String delimiter, Object[]array){
    String s = "";

    // split array
    if (array != null && array.length > 0) {
        s = Arrays.toString(array).replace("[", "").replace("]", "");
    }

    // place delimiter (notice the space in ", ")
    if(delimiter != null){
        s = s.replace(", ", delimiter);
    }

    return s;
}

2番目の引数の型を配列型に合わせて変更します


0

これは最適化された方法です

StringBuilder sb = new StringBuilder();
for (String n : arr) { 
    sb.append("'").append(n).append("',");
}
if(sb.length()>0)
    sb.setLength(sbDiscrep.length()-1);
return sb.toString();

0

以前のJava 8ソリューションの拡張

String result = String.join(",", name);

配列値に接頭辞または/および接尾辞が必要な場合

 StringJoiner joiner = new StringJoiner(",");
 for (CharSequence cs: name) {
     joiner.add("'" + cs + "'");
 }
 return joiner.toString();

または単純な方法の概念

  public static String genInValues(String delimiter, String prefix, String suffix, String[] name) {
    StringJoiner joiner = new StringJoiner(delimiter);
    for (CharSequence cs: name) {
      joiner.add(prefix + cs + suffix);
    }
    return joiner.toString();
  }

例えば

For Oracle i need "id in (1,2,3,4,5)" 
then use genInValues(",", "", "", name);
But for Postgres i need "id in (values (1),(2),(3),(4),(5))"
then use genInValues(",", "(", ")", name);

-1

これは役に立ちます!!!

private static String convertArrayToString(String [] strArray) {
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i<= strArray.length-1; i++) {
                if(i == strArray.length-1) {
                    builder.append("'"+strArray[i]+"'");
                }else {
                    builder.append("'"+strArray[i]+"'"+",");
                }
            }
            return builder.toString();
        }

3
回答の背景を教えてください。
Matthieu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.