जावा में एक स्ट्रिंग में स्ट्रिंग के कन्वर्ट सरणी


242

मैं स्ट्रिंग में एक सरणी को बदलने के लिए जावा कोड चाहता हूं।


किस प्रकार की सरणी? तार की सरणी?
adarshr

2
array.toString()? थोड़ा और विस्तार में बताओ।
स्टेन कुरिलिन

1
@Princeyesuraj, आधिकारिक उत्तर एडारश द्वारा प्रदान किया गया है । आप खुद विभाजक चाहते हैं, तुम कोशिश कर सकते JoeSlav के जवाब है, और अगर कोई धागा बात नहीं, आप उपयोग कर सकते हैं StringBuilder के बजाय StringBuffer effiency के लिए। क्रॉक का उत्तर अच्छा है, लेकिन मेरी राय में थोड़ा अधिक।
दांते मई कोड

जवाबों:


470

यदि आप किसी सरणी का "डिबग-स्टाइल" डंप चाहते हैं:

String str = Arrays.toString(arr);

या, अधिक नियंत्रण के लिए (जावा 8 से पहले):

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(जावा 8 और ऊपर):

String str = String.join(",", arr);

और अगर आप Android कोण से आ रहे हैं:

String str = TextUtils.join(",", arr);

आप उपरोक्त वर्णों के आधार पर उपरोक्त को संशोधित कर सकते हैं, यदि कोई हो, तो आप तार के बीच में चाहते हैं।

आप प्री-जावा 8 कोड के समान कोड के पास देख सकते हैं लेकिन उपयोग करना StringBuffer- StringBuilderएक नया वर्ग है जो थ्रेड-सुरक्षित नहीं है, लेकिन इसलिए एकल थ्रेड में बेहतर प्रदर्शन है क्योंकि यह अनावश्यक सिंक्रनाइज़ेशन के साथ दूर होता है। संक्षेप में, आप StringBuilder99% मामलों में बेहतर उपयोग कर रहे हैं - कार्यक्षमता बुद्धिमान, दो समान हैं।

यह एक स्ट्रिंग का उपयोग नहीं करता है और बस इसके साथ + = जोड़ते हैं जैसे कुछ उत्तर यहां दिखाए जाते हैं। यह जीसी को छत के माध्यम से भेजता है क्योंकि आप अपने स्ट्रिंग में आइटम के रूप में कई स्ट्रिंग ऑब्जेक्ट बना रहे हैं और फेंक रहे हैं। छोटे सरणियों के लिए आप वास्तव में अंतर नहीं देख सकते हैं, लेकिन बड़े लोगों के लिए यह परिमाण धीमी करने के आदेश हो सकते हैं।


13
इस बात पर स्पष्टीकरण के लिए धन्यवाद कि क्यों StringBuilder अपील करने के लिए + = से बेहतर है।
निकोलस मिलर

5
यदि आप कवर्स के नीचे एक + = का उपयोग करते हैं, तो जावा एक स्ट्रिंगब्यूलर का उपयोग करने के लिए बदल देगा।
जवमान

6
@matteo, आपको उपयोग करना है Arrays.toString(yourArray);लेकिन मुझे लगता है कि आपने इस्तेमाल किया हैyourArray.toString();
Dzarafata

5
जावा के बाद से 1.8आप String::joinफॉर-लूप की जगह भी इस्तेमाल कर सकते हैं । String.join("", arr);
जोर्न वर्नी

2
Android डेवलपर्स स्ट्रिंग परिणाम = TextUtils.join (",", सूची) की तरह उपयोग कर सकते हैं; stackoverflow.com/questions/33802971/…
राहुल हॉग

102

अपाचे कॉमन्स का उपयोग करें StringUtils.join()। यह एक सरणी लेता है, एक पैरामीटर के रूप में (और इसके लिए भी अधिभार Iterableऔर Iteratorपैरामीटर हैं) और toString()प्रत्येक तत्व पर कॉल (यदि यह शून्य नहीं है) प्रत्येक तत्व स्ट्रिंग प्रतिनिधित्व प्राप्त करने के लिए। प्रत्येक तत्वों स्ट्रिंग प्रतिनिधित्व को एक स्ट्रिंग में एक विभाजक के साथ जोड़ा जाता है यदि बीच में निर्दिष्ट किया जाता है:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

पैदा करता है:

a-b-1

1
मामूली सुधार: joinString = StringUtils.join (नई वस्तु [] {"a", "b", "1"}, "-");
21

35

मुझे इसके लिए Google के Guava Joiner का उपयोग करना पसंद है , जैसे:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

के रूप में एक ही उत्पादन होगा स्ट्रिंग:

new String("Harry, Ron, Hermione");

ETA: Java 8 को अब समान समर्थन प्राप्त है:

String.join(", ", "Harry", "Ron", "Hermione");

शून्य मानों को लंघन के लिए समर्थन नहीं देख सकता है, लेकिन यह आसानी से चारों ओर काम कर रहा है।


10
लेकिन अगर हम कथानक पर खरे हो रहे हैं, nullतो वह होगा "जिसका नाम उल्लेख नहीं किया जाना चाहिए" :-)
स्टीफन सी

22
अगर आप बहादुर हैं;;Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
अमीर

जावा -8 का उपयोग करनाString.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo

13

आप यह कर सकते हैं, aआदिम प्रकार की एक सरणी दी :

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();

23
StringBuffer पुराना है, StringBuilder का उपयोग करें जिसके बजाय एक थ्रेड में उपयोग के लिए अनावश्यक सिंक्रनाइज़ेशन नहीं है।
जेसन एस

13

जावा 8 से, मुझे लगता है कि सबसे सरल तरीका है:

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

इस तरह आप एक मनमाना परिसीमन चुन सकते हैं।


10

प्रयास करें Arrays.deepToString विधि।

निर्दिष्ट सरणी की "गहरी सामग्री" का एक स्ट्रिंग प्रतिनिधित्व लौटाता है। यदि सरणी में अन्य सरणियाँ तत्व के रूप में हैं, तो स्ट्रिंग प्रतिनिधित्व में उनकी सामग्री और इतने पर शामिल हैं। इस पद्धति को बहुआयामी सरणियों को तार में परिवर्तित करने के लिए डिज़ाइन किया गया है


यदि आपको बहुत नियंत्रण की आवश्यकता नहीं है, तो मेरा मानना ​​है कि यह सबसे सरल उपाय है क्योंकि आपको तीसरे पक्ष के परिवाद की आवश्यकता नहीं है। यहाँ एक उदाहरण है: System.out.println (Arrays.deepToString (args));
नव

7

अधिक भार वाले तरीकों से Arrays.toString आज़माएं ।

या फिर, इसे सामान्य कार्यान्वयन से नीचे आज़माएँ:

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}

फिर हमें वह प्रारूप बताएं जिसकी आपको तलाश है। अन्यथा, हम अनुमान नहीं लगा सकते कि आपके मन में क्या है।
जेसन एस

3

निम्नलिखित Array से String रूपांतरण का एक उदाहरण है।

    सार्वजनिक वर्ग ArrayToString
    {
सार्वजनिक स्थैतिक शून्य main (String [] args) { स्ट्रिंग [] strArray = नया स्ट्रिंग [] {"जावा", "PHP", ".NET", "PERL", "C", "COBOL"};

        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}


1
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms

यदि आपके पास चॉइस नहीं है, लेकिन जावा 6 या 7 का उपयोग करने के लिए तो आपको डिवाइड एंड कॉन्कर जॉइन का उपयोग करना चाहिए।


0

आप कोड चाहते हैं जो arrayList से स्ट्रिंग का उत्पादन करता है,

Iterate through all elements in list and add it to your String result

आप इसे 2 तरीकों से कर सकते हैं: स्ट्रिंग को परिणाम के रूप में या StringBuffer / StringBuilder का उपयोग करना।

उदाहरण:

String result = "";
for (String s : list) {
    result += s;
}

... लेकिन यह प्रदर्शन के कारण अच्छा अभ्यास नहीं है। बेहतर StringBuffer (थ्रेड्स सुरक्षित) या StringBuilder का उपयोग कर रहा है जो स्ट्रिंग्स को जोड़ने के लिए अधिक उपयुक्त हैं



-1
String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);

1
आपका उत्तर मूल रूप से smas जैसा ही है; बस थोड़ा और अधिक जटिल; इस प्रकार सुनिश्चित करें कि "सबसे आसान" एक नहीं है। और इसके अलावा, Arrays.toString () और भी आसान है।
घोस्टकट

-22

यदि आपको पता है कि सरणी में कितने तत्व हैं, तो एक सरल तरीका यह कर रहा है:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 

10
यह शायद ही वास्तविक दुनिया में लागू होता है और कुछ खराब प्रोग्रामिंग प्रथाओं को दर्शाता है।
Jk1

3
प्राप्त करने के लिए महान स्वर्ण पदक हो सकता है -50 नकारात्मक
पाब्लो Cegarra
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.