एक स्ट्रिंग सरणी को वापस स्ट्रिंग में कैसे बदलें?


405

मेरे पास एक चार सरणी है:

char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};

मेरा वर्तमान समाधान करना है

String b = new String(a);

लेकिन निश्चित रूप से ऐसा करने का एक बेहतर तरीका है?


151
ऐसा क्यों लगता है कि एक बेहतर तरीका है? और मुझे शर्ली मत कहो। :)
ईल

क्योंकि मैं हमेशा नए वैरिएबल को बनाता हूं जैसे कि रनटाइम के दौरान सिर के ऊपर हल्का सा। जैसे अगर मैंने ऊपर की लाइन को एक चार सरणी में बदलने के लिए एक स्ट्रिंग में एक उदाहरण के लिए लूप में डाल दिया, तो मेरे लिए यह बिल्कुल सही नहीं लगता है। और हां मैं थोड़ा परफेक्शनिस्ट हूं। । ।
chutsu

1
यदि आपके पास इनमें से बहुत सारे लोग हैं, तो एक सरणी या चार का संग्रह कहें [], तो शायद आप स्ट्रिंग सरणियों को एक StringBuffer में जोड़ देंगे, लेकिन एक स्ट्रिंग के लिए यहाँ या वहाँ, जो आपने पोस्ट किया है वह सबसे अधिक उपयोग होता है।
ईल

यदि आप चार [] को कॉपी करने से बचने का एक तरीका ढूंढ रहे हैं तो कोई नहीं है। अन्यथा आप स्ट्रिंग की अपरिवर्तनीयता को हटा सकते हैं।
पॉल कैगर

13
"नए वेरिएबल बनाना" शून्य ओवरहेड को बढ़ाता है। एक चर एक मान को संदर्भित करने के लिए उपयोग किया जाने वाला नाम है, और नाम ही रनटाइम पर मेमोरी में कहीं भी मौजूद नहीं है (कम से कम, जावा जैसी भाषा में नहीं जहां प्रतिबिंब काफी सीमित है)। "ओवरहेड" एक नए मूल्य का निर्माण करने से आता है , और आपके मामले में कोई रास्ता नहीं है, यह देखते हुए कि आपकी समस्या "इस मूल्य का निर्माण" है। आप स्ट्रिंग को जादुई रूप से प्रसारित करने के लिए वर्ण सरणी का कारण नहीं बन सकते। स्ट्रिंग बनने के बाद आप मूल चार सरणी के लिए कचरा एकत्र करने की व्यवस्था कर सकते हैं
कार्ल केंचेल

जवाबों:


212

नहीं, यह समाधान बिल्कुल सही है और बहुत कम है।

हालांकि, ध्यान दें कि यह एक बहुत ही असामान्य स्थिति है: क्योंकि Stringविशेष रूप से जावा में संभाला जाता है, यहां तक "foo"कि वास्तव में ए String। तो एक स्ट्रिंग को अलग-अलग charएस में विभाजित करने और उन्हें वापस जोड़ने की आवश्यकता को सामान्य कोड में आवश्यक नहीं है।

इसकी तुलना C / C ++ से करें जहां "foo"आपके पास charएक तरफ शून्य बाइट द्वारा समाप्त किए गए एस का एक बंडल है और stringदूसरी तरफ विरासत विधि के कारण उनके बीच कई रूपांतरण हैं।


146

String text = String.copyValueOf(data);

या

String text = String.valueOf(data);

यकीनन बेहतर है ( new Stringकॉल को एनकैप्सुलेट करता है )।


6
दोनों विधियां कॉल String(char[])या उस का एक प्रकार है। और कॉपी हिस्सा अंदर किया जाता है String(char[])। यह अन्य valueOfविधियों के साथ समरूपता के अलावा प्रत्यक्ष कॉल का कोई लाभ नहीं देता है ।
एएच

1
स्थिर और अधिक OOP शब्दों का एक विरोधाभास है। कुछ भी घोषित स्थिर हिस्सा एक वस्तु या उसके व्यवहार और इसलिए उन्मुख नहीं वस्तु नहीं है। इसके अलावा - अगर कोई भी मौका होगा कि कार्यान्वयन को Stringबदल दिया जाएगा और / या असंगत तरीके से बढ़ाया जाएगा या रनिंग के समय कई प्रतिस्पर्धी कार्यान्वयन चुने जा सकते हैं, तो एक स्थिर कारखाना विधि समझ में आती है। ऐसा निम्न स्तर की चीज के साथ नहीं होगा String। इसलिए मेरा आधार है: सबसे छोटे हथौड़े का उपयोग करें, न कि सबसे बड़ा उपलब्ध।
एएच

@ मैं उसके बारे में नहीं जानता। StringBuffer को StringBuffer ने रास्ता दिया जिससे StringBuffer को रास्ता मिल गया। मैंने शर्त लगाई कि स्ट्रिंगबफ़र के समर्थकों ने फिर वही बात कही, और अब स्ट्रिंगरबर्स्ट का उपयोग करने के लिए कोड को रिफलेक्टर करना होगा।
corsiKa

1
@ एएएच तथ्य यह है कि उन्हें CharSequenceइंटरफ़ेस बनाने के लिए दिखाया गया था कि आपके "स्ट्रिंग जैसे निम्न स्तर के सामान के साथ अभद्रता " कैसे होती है - वे यह नहीं बदलते हैं कि स्ट्रिंग में क्या होता है क्योंकि उन्होंने खुद को इससे पहले ही बांध लिया था, और अब वे चाहते हैं उनके पास नहीं होगा।
corsiKa

1
@corsiKa मैंने यह नहीं कहा, कि स्ट्रिंग एपीआई सभी अच्छे और सुनहरे हैं। केवल यह कि यह एक असंगत तरीके से नहीं बदलेगा और यह कि स्वयं वर्ग और इसके निर्माता कहीं भी नहीं जाएंगे। :-)
एएच

37

यह चार सरणी को वापस स्ट्रिंग में बदल देगा:

char[] charArray = {'a', 'b', 'c'};
String str = String.valueOf(charArray);

14
String str = "wwwwww3333dfevvv";
char[] c = str.toCharArray();

अब चरित्र सरणी को स्ट्रिंग में बदलने के लिए, दो तरीके हैं।

Arrays.toString(c);

स्ट्रिंग लौटाता है [w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]

तथा:

String.valueOf(c)

स्ट्रिंग लौटाता है wwwwww3333dfevvv

सारांश में : पर ध्यान दें Arrays.toString(c), क्योंकि आप "[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]"इसके बजाय मिलेंगे "wwwwww3333dfevvv"


7

जावा में एक स्ट्रिंग मात्र चार वर्णों की एक वस्तु है। इसलिए ए

char[]

एक ही अक्षर के साथ एक अनबॉक्स्ड स्ट्रिंग के समान है। अपने वर्णों की एक नई स्ट्रिंग बनाकर

new String(char[])

आप अनिवार्य रूप से अपने वर्णों के चारों ओर स्ट्रिंग ऑब्जेक्ट को ऑटोबॉक्स के लिए संकलक बता रहे हैं।


3

आप String.valueOfविधि का उपयोग कर सकते हैं ।

उदाहरण के लिए,

char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
String b = String.valueOf(a);
System.out.println("Char Array back to String is: " + b);

स्ट्रिंग के लिए चार सरणी पर अधिक के लिए आप नीचे दिए गए लिंक का उल्लेख कर सकते हैं

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

https://www.flowerbrackets.com/convert-char-array-to-string-java/


2
package naresh.java;

public class TestDoubleString {

    public static void main(String args[]){
        String str="abbcccddef";    
        char charArray[]=str.toCharArray();
        int len=charArray.length;

        for(int i=0;i<len;i++){
            //if i th one and i+1 th character are same then update the charArray
            try{
                if(charArray[i]==charArray[i+1]){
                    charArray[i]='0';                   
                }}
                catch(Exception e){
                    System.out.println("Exception");
                }
        }//finally printing final character string
        for(int k=0;k<charArray.length;k++){
            if(charArray[k]!='0'){
                System.out.println(charArray[k]);
            }       }
    }
}

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, क्यों और / या इस कोड के उत्तर के बारे में अतिरिक्त संदर्भ प्रदान करने से प्रश्न इसके दीर्घकालिक मूल्य में सुधार करता है।
baikho

1
 //Given Character Array 
  char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};


    //Converting Character Array to String using String funtion     
    System.out.println(String.valueOf(a));
    //OUTPUT : hello world

जावा 8 स्ट्रीम फ़ंक्शन का उपयोग करके किसी भी दिए गए सरणी प्रकार को स्ट्रिंग में परिवर्तित करना

String stringValue = 
Arrays.stream(new char[][]{a}).map(String::valueOf).collect(Collectors.joining());

1

उपयोग करने का प्रयास करें java.util.Arrays। इस मॉड्यूल में कई उपयोगी विधियाँ हैं जिनका उपयोग एरे से संबंधित किया जा सकता है।

Arrays.toString(your_array_here[]);


0

बस नीचे की तरह String.value का उपयोग करें;

  private static void h() {

        String helloWorld = "helloWorld";
        System.out.println(helloWorld);

        char [] charArr = helloWorld.toCharArray();

        System.out.println(String.valueOf(charArr));
    }

-3

इसे इस्तेमाल करे:

CharSequence[] charArray = {"a","b","c"};

for (int i = 0; i < charArray.length; i++){
    String str = charArray.toString().join("", charArray[i]);
    System.out.print(str);
}

-4

आप StringBuilder वर्ग का भी उपयोग कर सकते हैं

String b = new StringBuilder(a).toString();

स्ट्रिंग या StringBuilder का उपयोग आपकी विधि आवश्यकताओं के साथ बदलता रहता है।


ऐसा क्यों? ऐसा करने से आपको क्या मिलता है?
केसी

-12

1 वैकल्पिक तरीका है:

String b = a + "";

3
यह गलत है क्योंकि यह मानता है कि toStringसही तरीके से काम करता है char[]। यह JVM के कुछ विशिष्ट विक्रेताओं और संस्करणों पर काम कर सकता है।
फेमिल

3
क्योंकि स्ट्रिंग क्लास अपरिवर्तनीय है, इससे दो ऑपरेशन किए जाएंगे: Stringring () कॉल करें aऔर एक अन्य स्ट्रिंग ऑब्जेक्ट का निर्माण करें जिसके साथ a.toString()और""
Alpay
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.