कन्वर्ट स्ट्रिंग [] कोमा में अलग स्ट्रिंग में अल्पविराम के लिए


109

मेरे पास एक है String[]

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

मैं इनवॉइस के अंदर sql क्वेरी में पैरामीटर के रूप में नाम भेजना चाहता हूं ताकि मैं एक प्रारूप में कैसे परिवर्तित करूं

'amit','rahul','surya'

18
क्या के बारे मेंString[] name = {"O'Neill"};
बार्ट कीर्स

जवाबों:


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
तब मैंने चेक का एक गुच्छा लिखा होगा। मैं सिर्फ कॉन्सेप्ट समझा रहा हूं, सेव-ऑल उदाहरण नहीं दे रहा हूं।
निको Huysamen

3
फिर से, अवधारणाओं ... और नीचे वोट के लिए धन्यवाद। लेकिन वहाँ तुम जाओ, इसे ठीक कर दिया।
निको ह्युसामेन

धन्यवाद दोस्त आप मेरा दिन बचाते हैं, लेकिन अगर आप बुरा न मानें तो आप @Bart Kiers का जवाब भी दे सकते हैं क्योंकि मुझे वह स्थिति मिल सकती है और मैं प्रोग्रामिंग plz में नया हूँ
दीपक कुमार

7
ओह, आपको इतनी सारी स्रोत लाइनें लिखने की आवश्यकता क्यों है यदि आप बस उपयोग कर सकते हैं String.join(...)या TextUtils.join(...)?
यूजीन ब्रूसोव

2
@EugeneBrusov मैं जा रहा हूँ और अनुमान लगाने जा रहा हूँ क्योंकि उत्तर जावा 8 की रिलीज़ से बहुत पहले 2011 में पोस्ट किया गया था;)
निको हुइसेमेन

211

या तो स्वयं एक सरल विधि लिखें, या वहाँ से बाहर विभिन्न उपयोगिताओं में से एक का उपयोग करें।

व्यक्तिगत रूप से मैं Apache StringUtils ( StringUtils.join ) का उपयोग करता हूं

संपादित करें: जावा 8 में, आपको इसकी बिल्कुल भी आवश्यकता नहीं है:

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

3
बिल्कुल सही! तुम भी अपने स्वयं के delimiters परिभाषित कर सकते हैं:StringUtils.join(names,',');
पागलपन

5
String list = "'" + StringUtils.join(names,"','") + "'";यह आपको SQL अनुरोध द्वारा आवश्यक एकल उद्धरण देगा।
हाईस्क्लेर

एंड्रॉइड के लिए:TextUtils.join(",", stringArrayOfEmails)
प्रतीक बुटानी



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(...)? मुझे लगता है कि एक लाइन कोड पांच लोगों की तुलना में बेहतर और सरल है।
यूजीन ब्रूसोव

27

आप org.apache.commons.lang.StringUtilsजावा में स्ट्रिंग सरणी से अल्पविराम से अलग परिणाम बनाने के लिए एपीआई का उपयोग भी कर सकते हैं ।

StringUtils.join(strArr,",");


9

यदि आपके पास एक निर्भरता के रूप में पहले से ही स्प्रिंग फ्रेमवर्क है, तो आप बहुत ही सरल उपयोग विधि का उपयोग कर सकते हैं:

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

7

आप इसे अमरूद पुस्तकालय का उपयोग करके भी सरल बना सकते हैं:

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

मैं अमरूद लाइब्रेरी का उपयोग कैसे करूं जहां आउटपुट है "amit,rahul,surya":?
कॉम्पैक LE2202x

5

StringBuilderअपने स्ट्रिंग पर उपयोग और पुनरावृति [], और प्रत्येक स्ट्रिंग को इसमें जोड़ें:

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

आप इसे कोड की एक पंक्ति के साथ कर सकते हैं:

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?
बार्ट कीर्ज़ जूल

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

कृपया बताएं कि आपका कोड वास्तव में क्या कर रहा है।
हिले

स्ट्रिंग को बदलना [] कोमा को अलग करना
विनायक

आपके उत्तर में, क्योंकि सही जानता है कि कुछ कोड है। इससे ज्यादा और कुछ भी कम नहीं, लेकिन इसकी कोई मदद नहीं।
हिले

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

आप इस तरह के साधारण ऑपरेशन के लिए स्ट्रिंगबर्ल को नहीं देखना चाहते हैं। कृपया ध्यान दें कि मैंने सामग्री सरणी के लिए आपके सरणी का नाम नाम से नामों में बदल दिया है :

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

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

0

दो लाइनें (घोषणाओं को छोड़कर; '' अंतिम रूप से 'शुरू में एक खाली स्ट्रिंग के बराबर घोषित की जानी चाहिए), यदि आप लंबवत रिक्ति के लिए बहुत परवाह नहीं करते हैं () लूप:

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

दो लाइनें, आप कर रहे हैं। :)


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;
}

अपने सरणी प्रकार के अनुरूप दूसरा तर्क प्रकार बदलें


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

पूर्व जावा 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
कृपया अपने उत्तर के लिए कुछ संदर्भ प्रदान करें।
मैथ्यू ब्रूचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.