সেরা অনুশীলন - একটি স্ট্রিংয়ের প্রথম চরিত্রকে ছোট ক্ষেত্রে রূপান্তর করুন


136

আমি এমন একটি পদ্ধতি চাই যা স্ট্রিংয়ের প্রথম চরিত্রটিকে ছোট ক্ষেত্রে রূপান্তরিত করে।

আমার পন্থা:

1।

public static string ReplaceFirstCharacterToLowerVariant(string name)
{
    return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}

2।

public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
    var firstChar = (byte)value.First();
    return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}

আপনার পদ্ধতির কি হবে?

উত্তর:


239

আমি সাধারণ কনটেন্টেশন ব্যবহার করব:

Char.ToLowerInvariant(name[0]) + name.Substring(1)

প্রথম সমাধানটি অনুকূলিত হয়নি কারণ string.Format ধীর এবং এটি আপনার প্রয়োজন হয় না যদি আপনার এমন ফর্ম্যাট থাকে যা কখনই পরিবর্তিত হয় না। এটি অক্ষরটিকে ছোট হাতের কাছে লুকিয়ে রাখার জন্য একটি অতিরিক্ত স্ট্রিং তৈরি করে, যা প্রয়োজন হয় না।

"+ 32" এর সাথে যোগাযোগটি কুৎসিত / রক্ষণাবেক্ষণযোগ্য নয় কারণ এটির জন্য ASCII চরিত্রের মান অফসেটের জ্ঞান প্রয়োজন। এটি ইউনিকোড ডেটা এবং এএসসিআইআই প্রতীক অক্ষরের সাথেও ভুল আউটপুট উত্পন্ন করবে।


4
আমি এটি করব:char.ToLower(name[0]).ToString() + name.Substring(1)
অ্যান্ড্রে

7
@ রুকিয়ান: +আপনি প্রচুর স্ট্রিং সংশ্লেষ করতে গেলে অপারেটরটি ধীর হয়। সেক্ষেত্রে একটি StringBuilderআরও ভাল পারফর্ম করবে would তবে এর +চেয়ে অনেক দ্রুত string.Format। যখন আপনাকে আসলে কিছু ফর্ম্যাট করতে হবে (যেমন পূর্ণসংখ্যা, ডাবলস বা তারিখগুলি প্রদর্শন করা) তখন ব্যবহার করুন।
ডার্ক ভোলমার

6
@ 0x03: যদি আপনি প্রচুর স্ট্রিংগুলি পুনরাবৃত্তভাবে সংবিধানিত করেন তবে এটি কেবল ধীর। আপনি যদি একটি একক ক্রিয়াকলাপে সমস্তকে সম্মতি দেন তবে +অপারেটরটি মোটেও ধীর হয় না, কারণ সংকলকটি এটিকে রূপান্তরিত করে String.Concat(তবে কিছু নির্বোধ কারণে String.Joinদ্রুততর String.Concat)।
থোররিন

2
দ্রুততর পদ্ধতিটি হ'ল: সর্বজনীন স্ট্যাটিক স্ট্রিং টুফার্সলিটারলওয়ার (স্ট্রিং টেক্সট) char var চরআরে = টেক্সট.টোচারার (); চরআরে [0] = চর.টোলওয়ার (চরআরে [0]); নতুন স্ট্রিং (চরআরে) ফেরত দিন; ।
মাত্তিও মিগলিওর

2
আমি public static string ToLowerFirst(this string source) { if (string.IsNullOrWhiteSpace(source)) return source; var charArray = source.ToCharArray(); charArray[0] = char.ToLower(charArray[0]); return new string(charArray); } @ মাত্তিমাগলিয়োরের মন্তব্যের ভিত্তিতে এক্সটেনশন ব্যবহার করেছি ।
KregHEk

64

পরিস্থিতির উপর নির্ভর করে, কিছুটা প্রতিরক্ষামূলক প্রোগ্রামিং বাঞ্ছনীয় হতে পারে:

public static string FirstCharacterToLower(string str)
{
    if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
        return str;

    return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}

ifবিবৃতি যদি তবুও এটি পরিবর্তন করা যাচ্ছে না নির্মিত হচ্ছে থেকে একটি নতুন স্ট্রিং বাধা দেয়। পরিবর্তে নাল ইনপুটটিতে পদ্ধতিটি ব্যর্থ হয়ে যেতে এবং একটি নিক্ষেপ করতে চাইতে পারেন ArgumentNullException

লোকেরা যেমন উল্লেখ করেছে, এর String.Formatজন্য ব্যবহার করা ওভারকিল।


আমি ভুল হলে আমাকে সংশোধন করুন তবে str.Sststring (1) এই পদ্ধতির গণনাটি নির্দেশিত না হওয়ায় প্রতীক 1 পজিশনে ফিরে আসবে। সুতরাং আপনার নিম্নতর ক্ষেত্রে চর [0] থাকবে + পজিশনে 1 চর তাই আমি স্ট্রিংয়ের প্রথম চর থেকে শুরু করে একটি চর অপসারণ করতে পছন্দ করেছি। ফলাফলটি প্রথম অক্ষর ছাড়াই স্ট্রিং। তারপরে আমি এই স্ট্রিংটি প্রথম
চরটিতে যুক্ত করব

3
@ বি-রেইন: নিজেকে সংশোধন করুন: এমএসডিএন.মাইক্রোসফট /en-us/library/hxthx5h6%28VS.90%29.aspx
থোরারিন

7

কেবলমাত্র যদি এই উত্তরটি জুড়েই হোঁচট খায় তবে যে কারওর পক্ষে এটি সহায়তা করে।

আমি মনে করি এটি একটি এক্সটেনশন পদ্ধতি হিসাবে সেরা হবে, তবে আপনি এটি আপনার স্ট্রিং দিয়ে বলতে পারেন irst ফার্স্টচ্যার্যাক্টরটোওয়ার ();

public static class StringExtensions
{
    public static string FirstCharacterToLower(this string str)
    {
        if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
        {
            return str;
        }

        return Char.ToLowerInvariant(str[0]) + str.Substring(1);
    }
}

3

আমার হয়

if (!string.IsNullOrEmpty (val) && val.Length > 0)
{
    return val[0].ToString().ToLowerInvariant() + val.Remove (0,1);   
}

3
আমি কৌতুহলী, কেন val.Remove? আমার কাছে একটু পাল্টা স্বজ্ঞাত বলে মনে হচ্ছে।
থোররিন

@ থোররিন স্পষ্টতই কারণ আপনি প্রথম চরটি অপসারণ করতে চান (কারণ আপনি সামনে ছোট কেস সংস্করণ যোগ করছেন)
রিকি

2

আমি স্বীকৃত উত্তরটি পছন্দ করি তবে পরীক্ষার পাশাপাশি আপনি সংক্ষিপ্তসার নিয়ে কাজ করছেন string.IsNullOrEmptyকিনা তাও পরীক্ষা করে দেখব Char.IsLower(name[1])। যেমন আপনি "এইডস" "এইডস" হয়ে উঠতে চান না become


7
আইএমও এই আহ্বানকারী দায়িত্ব
onof

1

গ # গালি না দিয়ে আমি দ্রুততম সমাধানটি জানি:

public static string LowerCaseFirstLetter(string value)
{
    if (value?.Length > 0)
    {
        var letters = value.ToCharArray();
        letters[0] = char.ToLowerInvariant(letters[0]);
        return new string(letters);
    }
    return value;
}

0

কয়েকটি সংযুক্ত এবং এটি একটি শৃঙ্খলাবদ্ধ এক্সটেনশন করেছে। সাদা স্পেস এবং নন-লেটারে শর্ট সার্কিট যুক্ত করা হয়েছে।

public static string FirstLower(this string input) => 
    (!string.IsNullOrWhiteSpace(input) && input.Length > 0 
        && char.IsLetter(input[0]) && !char.IsLower(input[0]))
    ? input[0].ToString().ToLowerInvariant() + input.Remove(0, 1) : input;

0

এটি সাম্প্রতিক সিনট্যাক্স এবং সঠিক বৈধতা ব্যবহার করে সামান্য এক্সটেনশন পদ্ধতি

public static class StringExtensions
{
    public static string FirstCharToLower(this string input)
    {
        switch (input)
        {
            case null: throw new ArgumentNullException(nameof(input));
            case "": throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input));
            default: return input.First().ToString().ToLower() + input.Substring(1);
        }
    }
}

1
নিশ্চিত নয় যে কোনও ব্যতিক্রম ছুঁড়ে ফেলাটাই সর্বোত্তম সমাধান হতে পারে। স্ট্রিংটি কি নাল বা ফাঁকা, কেবল নাল বা খালি স্ট্রিংটি ফেরত দিন।
আর ডি ভেন

স্ট্রিং যদি নাল বা ফাঁকা থাকে তবে ছোট হাতের অক্ষরে পরিবর্তনের কোনও প্রথম চর নেই বলে অপারেশনটি বোঝা যায় না।
কার্লোস Muñoz

0

এটা ব্যবহার কর:

string newName= name[0].ToString().ToLower() + name.Substring(1);

-3

এটা ব্যবহার করা উত্তম String.Concatচেয়ে String.Formatযদি আপনি যে বিন্যাস জানেন ডেটা পরিবর্তন করা হয় না, এবং মাত্র সংযুক্তকরণের আকাঙ্ক্ষিত হয়।

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