एक स्ट्रिंग को एक स्ट्रिंग में कैसे बदलें?


837

मैं एक है charऔर मैं एक की जरूरत है String। मैं एक से दूसरे में कैसे परिवर्तित करूं?


187
Downvoted? मैं इतना आसान सवाल क्यों पूछूंगा? क्योंकि इस प्रश्न के लिए Google के पास वास्तव में स्पष्ट खोज परिणाम का अभाव है। इसे यहां डालकर हम उसे बदल देंगे।
लैंडन कुह्न

45
मैं आपकी राय से पूरी तरह सहमत हूँ। मैंने इसे नकारात्मक वोट से छुटकारा पाने के लिए वोट दिया। मैं दृढ़ता से सभी के लिए इस तरह के googling विषय बनाने में विश्वास करता हूं। =)
०48:४00 पर प्रोलिंक ००

4
क्या आपके शोध में स्ट्रिंग कक्षा के प्रलेखन को पढ़ना शामिल था?
डीजेकवर्थ

12
@DJClayworth अधिकांश SO प्रश्नों का उत्तर RTFM के साथ दिया जा सकता है, लेकिन यह बहुत उपयोगी नहीं है। उन लोगों को क्यों नहीं मिला, जो सवाल उठाते हैं और इसे अपना कोर्स करने देते हैं?
शाम

10
@PaBBellora केवल यह कि स्टैकऑवरफ्लो अनुसंधान के लिए पहला पड़ाव बन गया है । अगर यहां पहले 10 Google परिणाम I कॉम में एक StackOverlfow लिंक है।
मार्टिन

जवाबों:


642

आप उपयोग कर सकते हैं Character.toString(char)। ध्यान दें कि यह विधि केवल एक कॉल को लौटाती है String.valueOf(char), जो काम भी करती है।

जैसा कि अन्य ने उल्लेख किया है कि, स्ट्रिंग संघनन एक शॉर्टकट के रूप में भी काम करता है:

String s = "" + 's';

लेकिन यह नीचे संकलित है:

String s = new StringBuilder().append("").append('s').toString();

जो कम कुशल है, क्योंकि StringBuilderएक के द्वारा समर्थित है char[](से जरूरत से ज्यादा किया StringBuilder()करने के लिए 16ही नहीं सरणी रक्षा जिसके परिणामस्वरूप द्वारा कॉपी करने के लिए), String

String.valueOf(char)"बैक डोर में मिलता है" charसिंगल-एलिमेंट एरे में रैप करके और इसे पैकेज प्राइवेट कंस्ट्रक्टर को पास कर दिया String(char[], boolean)जाता है, जो एरे कॉपी से बच जाता है।


मुझे लगता है कि शॉर्टकट नीचे दिया गया है:new StringBuilder("").append('s').toString();
बिंकान सैलरीमैन

@BinkanSalaryman javac 1.8.0_51-b16 का उपयोग कर रहा है और फिर विघटित करने के लिए javap, मुझे उत्तर में मेरे पास कंस्ट्रक्टर / विधि कॉल दिखाई देती है। तुम क्या प्रयोग कर रहे हो?
पॉल बेलोरा

236

अच्छा प्रश्न। मुझे इसे करने के लिए निम्नलिखित पाँच 6 विधियाँ मिली हैं ।

// #1
String stringValueOf = String.valueOf('c'); // most efficient

// #2
String stringValueOfCharArray = String.valueOf(new char[]{x});

// #3
String characterToString = Character.toString('c');

// #4
String characterObjectToString = new Character('c').toString();

// #5
   // Although this method seems very simple, 
   // this is less efficient because the concatenation
   // expands to new StringBuilder().append(x).append("").toString();
String concatBlankString = 'c' + "";

// #6
String fromCharArray = new String(new char[]{x});

नोट: Character.toString (char) रिटर्न String.valueOf (char) । तो प्रभावी रूप से दोनों समान हैं।

String.valueOf(char[] value)इनवोक new String(char[] value), जो बदले में valueचार सरणी सेट करता है ।

public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

दूसरी ओर String.valueOf(char value)निम्नलिखित पैकेज निजी निर्माणकर्ता को आमंत्रित करता है

String(char[] value, boolean share) {
    // assert share : "unshared not supported";
    this.value = value;
}

से स्रोत कोड String.javaमें जावा 8 स्रोत कोड

इसलिए String.valueOf(char), रूपांतरण charकरने के लिए, स्मृति और गति दोनों के संदर्भ में सबसे अधिक कारगर तरीका लगता है String

  1. जावा में आदिम चर को स्ट्रिंग में कैसे परिवर्तित करें
  2. उदाहरण के साथ जावा में स्ट्रिंग को स्ट्रिंग में कैसे बदलें

50

नीचे स्ट्रिंग सी में बदलने के विभिन्न तरीके हैं (गति और दक्षता के घटते क्रम में)

char c = 'a';
String s = String.valueOf(c);             // fastest + memory efficient
String s = Character.toString(c);
String s = new String(new char[]{c});
String s = String.valueOf(new char[]{c});
String s = new Character(c).toString();
String s = "" + c;                        // slowest + memory inefficient

किसी ने यह परीक्षण किया?
लुकास नॉटज़ोल्ड

34

Character.toString()विधि का प्रयोग इस तरह करें:

char mChar = 'l';
String s = Character.toString(mChar);

33

निम्नलिखित में से किसी का उपयोग करें:

String str = String.valueOf('c');
String str = Character.toString('c');
String str = 'c' + "";

17

जैसा कि @WarFox ने कहा है - char को string में बदलने के लिए 6 तरीके हैं। हालांकि, सबसे तेज़ एक निष्कर्ष के माध्यम से होगा, यह बताते हुए कि यह है के ऊपर उत्तर के बावजूद String.valueOf। यहाँ बेंचमार्क है जो साबित करता है कि:

@BenchmarkMode(Mode.Throughput)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 10, time = 1, batchSize = 1000, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 1, batchSize = 1000, timeUnit = TimeUnit.SECONDS)
public class CharToStringConversion {

    private char c = 'c';

    @Benchmark
    public String stringValueOf() {
        return String.valueOf(c);
    }

    @Benchmark
    public String stringValueOfCharArray() {
        return String.valueOf(new char[]{c});
    }

    @Benchmark
    public String characterToString() {
        return Character.toString(c);
    }

    @Benchmark
    public String characterObjectToString() {
        return new Character(c).toString();
    }

    @Benchmark
    public String concatBlankStringPre() {
        return c + "";
    }

    @Benchmark
    public String concatBlankStringPost() {
        return "" + c;
    }

    @Benchmark
    public String fromCharArray() {
        return new String(new char[]{c});
    }
}

और परिणाम:

Benchmark                                        Mode  Cnt       Score      Error  Units
CharToStringConversion.characterObjectToString  thrpt   10   82132.021 ± 6841.497  ops/s
CharToStringConversion.characterToString        thrpt   10  118232.069 ± 8242.847  ops/s
CharToStringConversion.concatBlankStringPost    thrpt   10  136960.733 ± 9779.938  ops/s
CharToStringConversion.concatBlankStringPre     thrpt   10  137244.446 ± 9113.373  ops/s
CharToStringConversion.fromCharArray            thrpt   10   85464.842 ± 3127.211  ops/s
CharToStringConversion.stringValueOf            thrpt   10  119281.976 ± 7053.832  ops/s
CharToStringConversion.stringValueOfCharArray   thrpt   10   86563.837 ± 6436.527  ops/s

जैसा कि आप देख सकते हैं, सबसे तेज़ एक होगा c + ""या "" + c;

VM version: JDK 1.8.0_131, VM 25.131-b11

यह प्रदर्शन अंतर -XX:+OptimizeStringConcatअनुकूलन के कारण है । आप इसके बारे में यहां पढ़ सकते हैं ।



4

हम विभिन्न तरीकों से एक कन्वर्ट करने के लिए है charकरने के लिए Stringएक तरीका यह है कि कक्षा toString()में स्थिर विधि का उपयोग किया जाए Character:

char ch = 'I'; 
String str1 = Character.toString(ch);

वास्तव में यह toStringविधि आंतरिक रूप valueOfसे Stringकक्षा से विधि का उपयोग करती है जो चार सरणी का उपयोग करती है:

public static String toString(char c) {
    return String.valueOf(c);
}

तो दूसरा तरीका यह है कि आप इसे सीधे इस्तेमाल करें:

String str2 = String.valueOf(ch);

कक्षा valueOfमें यह विधि Stringचार वर्णों का उपयोग करती है:

public static String valueOf(char c) {
        char data[] = {c};
        return new String(data, true);
}

तो तीसरा तरीका यह है कि एक एकल चरित्र को लपेटने के लिए एक अनाम सरणी का उपयोग किया जाए और फिर उसे Stringकंस्ट्रक्टर के पास भेजा जाए :

String str4 = new String(new char[]{ch});

चौथा रास्ता संयोजन के मेकअप उपयोग करने के लिए है:

String str3 = "" + ch;

यह वास्तव में कक्षा appendसे विधि का उपयोग करेगा StringBuilderजो वास्तव में पसंद किया जाता है जब हम एक लूप में कॉन्टैक्शन कर रहे होते हैं।


4

यहाँ कुछ तरीके हैं, कोई विशेष क्रम में नहीं:

char c = 'c';

String s = Character.toString(c); // Most efficient way

s = new Character(c).toString(); // Same as above except new Character objects needs to be garbage-collected

s = c + ""; // Least efficient and most memory-inefficient, but common amongst beginners because of its simplicity

s = String.valueOf(c); // Also quite common

s = String.format("%c", c); // Not common

Formatter formatter = new Formatter();
s = formatter.format("%c", c).toString(); // Same as above
formatter.close();

2

मैं चार ऐरे को स्ट्रिंग में परिवर्तित कर रहा हूं

Char[] CharArray={ 'A', 'B', 'C'};
String text = String.copyValueOf(CharArray);

यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें। - समीक्षा से
pczeus

मैं चरण अरिंजर को स्ट्रिंग @ पीसीज़ियस
शिव

0

मैंने सुझावों की कोशिश की है लेकिन इसे इस प्रकार लागू किया गया है

editView.setFilters(new InputFilter[]{new InputFilter()
        {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend)
            {
                String prefix = "http://";

                //make sure our prefix is visible
                String destination = dest.toString();

                //Check If we already have our prefix - make sure it doesn't
                //get deleted
                if (destination.startsWith(prefix) && (dstart <= prefix.length() - 1))
                {
                    //Yep - our prefix gets modified - try preventing it.
                    int newEnd = (dend >= prefix.length()) ? dend : prefix.length();

                    SpannableStringBuilder builder = new SpannableStringBuilder(
                            destination.substring(dstart, newEnd));
                    builder.append(source);
                    if (source instanceof Spanned)
                    {
                        TextUtils.copySpansFrom(
                                (Spanned) source, 0, source.length(), null, builder, newEnd);
                    }

                    return builder;
                }
                else
                {
                    //Accept original replacement (by returning null)
                    return null;
                }
            }
        }});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.