একটি চরকে স্ট্রিংয়ে কীভাবে রূপান্তর করবেন?


837

আমি একটি আছে charএবং আমি একটি প্রয়োজন String। আমি কীভাবে একজনের থেকে অন্যটিতে রূপান্তর করব?


187
Downvoted? আমি কেন এত সহজ প্রশ্ন করব? কারণ গুগলের কাছে এই প্রশ্নের সত্যিকারের সুস্পষ্ট অনুসন্ধানের অভাব রয়েছে। এটি এখানে রেখে আমরা এটি পরিবর্তন করব।
ল্যান্ডন কুহন

45
আমি আপনার মতের সাথে একমত. নেতিবাচক ভোট থেকে মুক্তি পেতে আমি এটিকে ভোট দিয়েছি। আমি দৃly়ভাবে প্রত্যেকের জন্য এই জাতীয় গুগল বিষয়গুলি তৈরি করতে বিশ্বাস করি। =)
prolink007

4
আপনার গবেষণায় স্ট্রিং ক্লাসের ডকুমেন্টেশন পড়া অন্তর্ভুক্ত ছিল?
ডিজেক্লেওয়ার্থ

12
@ ডিজেক্লেওয়ার্থ সর্বাধিক এসও প্রশ্নের উত্তর আরটিএফএম দিয়ে দেওয়া যেতে পারে, তবে এটি খুব সহায়ক নয়। প্রশ্ন খুঁজে পাওয়া লোকেদের কেন এটিকে উজ্জীবিত করতে এবং জিনিসগুলিকে তাদের পথ অনুসরণ করতে দেওয়া হবে না?
বেলডাজ

10
@ পলবেলোরা কেবলমাত্র স্ট্যাক ওভারফ্লো গবেষণার জন্য প্রথম স্টপ হয়ে উঠেছে । যদি এখানে প্রথম 10 টি গুগল রেজাল্টে স্ট্যাক ওভারফ্লো লিঙ্ক থাকে তবে আমি এখানে কম করছি।
মার্টিন

উত্তর:


642

আপনি ব্যবহার করতে পারেন Character.toString(char)। নোট করুন যে এই পদ্ধতিটি কেবল একটি কলকে কল করে String.valueOf(char), যা কাজ করে।

অন্যরা যেমন উল্লেখ করেছে, স্ট্রিং কনটেনটেশন শর্টকাট হিসাবেও কাজ করে:

String s = "" + 's';

তবে এটি সংকলন করে:

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

যা কম দক্ষ কারণ StringBuilderএকটি দ্বারা ব্যাক হয় char[](দ্বারা ওভার বরাদ্দ StringBuilder()করতে 16শুধু তাই অ্যারের defensively ফলে দ্বারা কপি করা জন্য) String

String.valueOf(char)charএকটি একক-উপাদান অ্যারেতে আবৃত করে এবং এটি প্যাকেজ ব্যক্তিগত কন্সট্রাক্টরের কাছে পৌঁছে দিয়ে "পিছনের দরজায় যায়" String(char[], boolean), যা অ্যারে অনুলিপি এড়ায়।


আমি মনে করি শর্টকাটটি এখানে new StringBuilder("").append('s').toString();
সংকলিত

@ বিঙ্কানসালারিম্যান জাভ্যাক ১.৮.০_51-বি 16 ব্যবহার করে এবং পরে জাপ্যাপটি ডেকেম্পাইল করতে, আমি উত্তরটিতে আমার কাছে কনস্ট্রাক্টর / পদ্ধতি কলগুলি দেখতে পাচ্ছি। আপনি কি ব্যবহার করছেন?
পল বেলোরা

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 (গৃহস্থালির কাজ করা) ফেরৎ String.valueOf (গৃহস্থালির কাজ করা) । সুতরাং কার্যকরভাবে উভয় একই।

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

@ ওয়ারফক্স যেমন বলেছে - চরকে স্ট্রিংয়ে রূপান্তর করার জন্য 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অপ্টিমাইজেশনের কারণে is আপনি এটি সম্পর্কে এখানে পড়তে পারেন ।



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;
                }
            }
        }});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.