আমি কীভাবে প্রথম # এর প্রথম অক্ষর এবং সি # তে সর্বশেষ নামটি বড় করে তুলব?


141

কোনও স্ট্রিংয়ের প্রথম অক্ষরকে মূলধন করে বাকী অংশটি কম করার কি সহজ উপায় আছে? পদ্ধতিতে কি অন্তর্নির্মিত আছে বা আমার নিজের তৈরি করার দরকার আছে?


3
আমি আপনার নির্দিষ্ট অ্যাপ্লিকেশন সম্পর্কে কিছুই জানি না, তবে আমি মনে করি যে একটি সাধারণ সতর্কতা হ'ল: প্রোগ্রামারদের এই নামটি উইল-নিলি প্রকৃত নামগুলিতে প্রয়োগ করা উচিত নয়। আমি মনে করি পুরাতন জন ম্যাকডোনাল্ড এই পদ্ধতিতে তার নাম নিয়ে ম্যাঙ্গালিংয়ে বিরক্ত হবে, ই-কামিংস, বেল হুকস, দানাহ বালক, mention 行 弘, শেষ নামের "ভন" সমেত লোক, শেষ নাম "ও'ডোল" সহ লোক , ইত্যাদি, ইত্যাদি, ইত্যাদি। বেশিরভাগ নামগুলি সেই মূলধন (এবং মূলধনযোগ্য অক্ষরগুলিতে) "ফার্স্ট লাস্ট" বিন্যাসের নয়; আমি kalzumeus.com/2010/06/17/…
নিক

@ নিক একেবারে ঠিক আছে। আপনি এমনকি ধরেও নিতে পারবেন না যে ছোট-বড় অক্ষরের পরে আপার-কেস ভুল - আইরিশ নামগুলি "A hAirt" এর মতো কাজ করে। ধরে নিন যে কোনও সম্মেলনের জন্য আপনি আপনার মাথার শীর্ষটি ভাবতে পারেন, এমন একটি সংস্কৃতি / ভাষা থাকবে যা আপনাকে অবাক করে দেবে।
জেমস মুর

উত্তর:


259

TextInfo.ToTitleCase()স্ট্রিংয়ের প্রতিটি টোকেনের প্রথম অক্ষরকে বড় করে তোলে।
যদি অ্যাক্রোনিয়াম বড় হাতের রক্ষণাবেক্ষণের প্রয়োজন না হয় তবে আপনার অন্তর্ভুক্ত করা উচিত ToLower()

string s = "JOHN DOE";
s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
// Produces "John Doe"

কারেন্টকালচার অনুপলব্ধ থাকলে ব্যবহার করুন:

string s = "JOHN DOE";
s = new System.Globalization.CultureInfo("en-US", false).TextInfo.ToTitleCase(s.ToLower());

বিস্তারিত বর্ণনার জন্য এমএসডিএন লিঙ্কটি দেখুন ।


24
এখানে একটি বিষয় লক্ষণীয় যে স্ট্রিংটি সমস্ত রাজধানী হলে এটি কাজ করে না। এটি মনে করে যে সমস্ত ক্যাপগুলি একটি সংক্ষিপ্ত রূপ।
মাইক রুস

9
এর মধ্যে অনেকের সাথে আমি যে জিনিসটি দেখেছি তা হ'ল আপনি তাদের উপর নির্ভর করতে পারবেন না। যদি নামটি ম্যাককেইনের মতো কিছু হয় বা আপনি আরও বিদেশী নাম মারতে শুরু করেন তবে এটি কার্যকর হবে না।
মাইক উইলস

25
@ রূসা - সেই টিটিটলকেসের জন্য সহজ সমাধান (ভাল.টোলওয়ার ())
সাইমন_উইভার

+1 আমি জানতাম এটি ইতিমধ্যে এফসিএলে থাকতে হবে, এবং গুগল আমাকে এখানে এনেছে = ডি
গিদিওন

13
নাথনের নীচের উত্তরের বিপরীতে, আমি একটি ত্রুটি পেয়েছি: "দুর্ভাগ্যক্রমে অ স্থিতিশীল ক্ষেত্র, পদ্ধতি বা সম্পত্তি ......." এর জন্য একটি অবজেক্ট রেফারেন্স প্রয়োজন।
ড্যান ডব্লু

117
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");

ছটফট! ভাল উত্তর. আমি সর্বদা বিশ্বায়নের জিনিসগুলি ভুলে যাই।
মাইকেল হরেন

দুর্দান্ত সমাধান! sItem = Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(sItem.ToLower) 'first char upper case
ভিবি.নেটে

আপনার প্রতিটি পৃথক নামের সংস্কৃতি সনাক্ত করতে হবে, বর্তমান সংস্কৃতিটি নয়। এটি নামের জন্য কাজ করে না।
জেমস মুর

1
এটি যেহেতু নির্ভর করে, তাই CurrentCultureআমরা কীভাবে নিশ্চিত হতে পারি যে এমন সংস্কৃতি নেই যা এটিকে ভিন্নভাবে পরিচালনা করে?
রুডি

30
String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);

উপরের কোডটি কাজ করবে না .....

সুতরাং নীচের কোডটি নিম্নে রূপান্তর করে ফাংশনটি প্রয়োগ করুন

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());

15

কিছু ক্ষেত্রে রয়েছে যা CultureInfo.CurrentCulture.TextInfo.ToTitleCaseপরিচালনা করতে পারে না, উদাহরণস্বরূপ: অ্যাস্টোস্ট্রোফ '

string input = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("o'reilly, m'grego, d'angelo");
// input = O'reilly, M'grego, D'angelo

একটি শৃঙ্খলা\b[a-zA-Z] শব্দের পরে একটি শব্দের প্রারম্ভিক চরিত্রটি সনাক্ত করতে একটি রেজেক্স ব্যবহার করা যেতে পারে \b, তারপরে আমাদের কেবল ম্যাচের প্রতিস্থাপনের প্রয়োজনটি তার উচ্চতর ক্ষেত্রে সমতা সমেত Regex.Replace(string input,string pattern,MatchEvaluator evaluator)পদ্ধতিটির জন্য ধন্যবাদ :

string input = "o'reilly, m'grego, d'angelo";
input = Regex.Replace(input.ToLower(), @"\b[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo

Regex প্রয়োজনে টিউন করা যাবে, উদাহরণস্বরূপ, যদি আমরা হ্যান্ডেল করতে চান MacDonaldএবং McFryমামলা Regex হয়ে:(?<=\b(?:mc|mac)?)[a-zA-Z]

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald'S, McFry

আমরা আরো উপসর্গ হ্যান্ডেল করার প্রয়োজন হলে আমরা কেবল গ্রুপ সংশোধন করতে প্রয়োজন (?:mc|mac)উদাহরণ ফরাসি উপসর্গ যোগ করার জন্য, du, de: (?:mc|mac|du|de)

অবশেষে, আমরা বুঝতে পারি যে এই রেজেক্সটিMacDonald'S শেষের ক্ষেত্রেও মিলবে 'sতাই আমাদের এটি পিছনে নেতিবাচক চেহারা দিয়ে রেজেক্সে পরিচালনা করতে হবে (?<!'s\b)। শেষে আমাদের আছে:

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald's, McFry

@ পোলকডুরান আমি নামের শেষে রোমান সংখ্যাসমূহের সাথে মোকাবিলা করার জন্য একটি উপায় খুঁজে পেতে লড়াই করছি; আমি তাদের সমস্ত বড় হাতের তৈরি করতে চাই: জন স্মিথ তৃতীয়। নেতিবাচক চেহারা পিছনে কি এতে বাধা দেবে?
ম্যাট

এটি সাধারণত যায়, অবশেষে আমি আমার নিজের প্রশ্নের উত্তর দিতে সক্ষম হয়েছি। আমি রোমান সংখ্যার সাথে মিল রাখতে একটি alচ্ছিক গোষ্ঠী যুক্ত করেছি (যা বড় হাতের অক্ষর পাবে)। আমি এখন ব্যবহার করছি এমন সম্পূর্ণ রেজেক্স এখানে রয়েছে: (? <? = বি (?: এমসি | ম্যাক)?) [A-zA-Z] (? <! 'S \ b) (?: ii | iii | iv | বনাম | VI | ঋ | অষ্টম | IX)?
ম্যাট

আপনার কেসটি একটি বিশেষ, উত্তরের রেজেক্স প্রতিটি নাম (শেষ নাম) ইনপুট স্ট্রিংয়ের একটি বিচ্ছিন্ন শব্দ হিসাবে বিবেচনা করে (পরীক্ষার ইনপুট স্ট্রিংয়ের বেশ কয়েকটি নাম রয়েছে) সুতরাং এতে 'নামের শেষ' ধারণাটি নেই । আপনি যদি ইনপুট স্ট্রিংটিকে একক নাম হিসাবে বিবেচনা করেন তবে আপনি আপনার ক্ষেত্রে মোকাবেলা করার জন্য একটি সাধারণ শর্ত দিয়ে রেজেক্সকে উপসর্গ করতে পারেন: \b[ivxlcdm]+$|সুতরাং আপনার আছে \b[ivxlcdm]+$|(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)। এটি একটি কঠোর রোমান অঙ্কের বিন্যাস ( ivxlcdm) না থাকা একটি নামের সমস্ত শেষ শব্দকে উচ্চারণ করবে । তবে আপনার কিছু অনাকাঙ্ক্ষিত ফলাফল থাকতে পারে, উদাহরণস্বরূপ 'লি' 'এলআই' হয়ে যাবে
পোলকডুরান

মজাদার. আমি মনে করি আপনার সংযোজন সম্ভবত কাঠামোর বিষয়ে আরও সঠিক, তবে আমি সম্মত ... আমি মনে করি কিছু সমস্যা থাকবে যা আপনি বলেছেন। উপরের আমার সমাধানে, আমি "আইএক্স" পর্যন্ত প্রত্যয়গুলি কঠোরভাবে কোড করেছি যা আমার ক্ষেত্রে কাজ করবে তবে আমি স্বীকার করেছি যে সবার জন্য উপযুক্ত নাও হতে পারে।
ম্যাট

1
@ সি 8, আপনি এটি পরীক্ষা করেছেন? Regex.Replace("JOHN DOE".ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)", m => m.Value.ToUpper())
পোলকডুরান

7

ম্যাক এবং ম্যাক সমগ্র মার্কিন যুক্তরাষ্ট্রে প্রচলিত উপাধি রয়েছে, এবং আরও কিছু রয়েছে। TextInfo.ToTitleCase এই কেসগুলি পরিচালনা করে না এবং এই উদ্দেশ্যে ব্যবহার করা উচিত নয়। আমি এখানে এটি কীভাবে করছি:

    public static string ToTitleCase(string str)
    {
        string result = str;
        if (!string.IsNullOrEmpty(str))
        {
            var words = str.Split(' ');
            for (int index = 0; index < words.Length; index++)
            {
                var s = words[index];
                if (s.Length > 0)
                {
                    words[index] = s[0].ToString().ToUpper() + s.Substring(1);
                }
            }
            result = string.Join(" ", words);
        }
        return result;
    }


4

সর্বাধিক প্রত্যক্ষ বিকল্পটি টটিটলকেস ফাংশনটি ব্যবহার করতে চলেছে যা .NET এ উপলব্ধ যা নামটির বেশিরভাগ সময় যত্ন নেওয়া উচিত। হিসাবে edg নির্দিষ্ট কিছু নাম এটি কার্যকরী হবে না, কিন্তু এই মোটামুটি বিরল তাই যদি না আপনি একটি সংস্কৃতি যেখানে যেমন নাম এটা প্রয়োজনীয় কিছু অত্যধিক সম্পর্কে চিন্তা করতে হবে নয় সাধারণ লক্ষ্য করে করা হয়।

তবে আপনি যদি নেট নেট লগে কাজ না করে থাকেন তবে এটি ইনপুটটি কেমন দেখাচ্ছে তার উপর নির্ভর করে - যদি আপনার প্রথম নাম এবং শেষ নামের জন্য দুটি পৃথক ক্ষেত্র থাকে তবে আপনি কেবলমাত্র প্রথম অক্ষরটি এটির বাকী অংশটি নীচে রেখে বড় করে তুলতে পারবেন সাবস্ট্রিং।

firstName = firstName.Substring(0, 1).ToUpper() + firstName.Substring(1).ToLower();
lastName = lastName.Substring(0, 1).ToUpper() + lastName.Substring(1).ToLower();

তবে, যদি আপনাকে একই স্ট্রিংয়ের অংশ হিসাবে একাধিক নাম সরবরাহ করা হয় তবে আপনাকে কীভাবে তথ্য পাচ্ছেন তা জানতে হবে এবং সেই অনুযায়ী এটি বিভক্ত করতে হবে । সুতরাং আপনি যদি "জন দো" এর মতো কোনও নাম পেয়ে থাকেন তবে স্থানের অক্ষরের উপর ভিত্তি করে স্ট্রিংকে আলাদা করুন। যদি এটি "ডো, জন" এর মতো ফর্ম্যাটে থাকে তবে আপনাকে এটি কমা ভিত্তিতে বিভক্ত করতে হবে। যাইহোক, একবার এটি আলাদা হয়ে গেলে আপনি কেবল আগে দেখানো কোডটি প্রয়োগ করুন।


3

সংস্কৃতিআইনফোর.কন্টেনচারালচার.টেক্সটইনফো.টো টাইটেলক্যাস ("আমার নাম");

ফেরত দেয় ~ আমার নাম

তবে সমস্যাটি এখনও রয়েছে ম্যাকফ্লাইয়ের মতো নাম নিয়ে যেমন আগেই বলা হয়েছে।


3
McFry! কোনিচিওয়া, মিঃ ফুগিতসু-সান
ইয়ান বয়ড

@ ডেভিড সি স্থান শূন্যের সাথে প্রতিস্থাপন করার চেষ্টা করুন !! স্ট্রিং.রেপ্লেস ('', '') এর মতো
চিন্তন

3

এটি ঠিক করার জন্য আমি আমার নিজস্ব পদ্ধতি ব্যবহার করি:

উদাহরণস্বরূপ বাক্যাংশ: "হ্যালো ওয়ার্ল্ড। হ্যালো এটি স্ট্যাকওভারফ্লো ওয়ার্ল্ড।" "হ্যালো ওয়ার্ল্ড Hello হ্যালো ইজ দ্য স্ট্যাকওভারফ্লো ওয়ার্ল্ড"। রেজেক্স \ বি (একটি শব্দের শুরু) \ ডাব্লু (শব্দের প্রথম অনুশীলক) কৌতুক করবে।

/// <summary>
/// Makes each first letter of a word uppercase. The rest will be lowercase
/// </summary>
/// <param name="Phrase"></param>
/// <returns></returns>
public static string FormatWordsWithFirstCapital(string Phrase)
{
     MatchCollection Matches = Regex.Matches(Phrase, "\\b\\w");
     Phrase = Phrase.ToLower();
     foreach (Match Match in Matches)
         Phrase = Phrase.Remove(Match.Index, 1).Insert(Match.Index, Match.Value.ToUpper());

     return Phrase;
}

2

ToTitleCase ব্যবহার করার পরামর্শগুলি সমস্ত বড় হাতের স্ট্রিংয়ের জন্য কাজ করবে না। সুতরাং আপনাকে প্রথম চরটিতে টুপার এবং বাকী অক্ষরগুলিতে টোলওয়ার কল করতে হবে।


6
টিটিটলকেসে কল করার আগে ইনপুট স্ট্রিংয়ে টোলওয়ারকে কল করবেন না কেন?
অ্যান্ডি রোজ

2

এই ক্লাসটি কৌশলটি করে। আপনি _প্রিফিক্স স্ট্যাটিক স্ট্রিং অ্যারেতে নতুন উপসর্গ যুক্ত করতে পারেন ।

public static class StringExtensions
{
        public static string ToProperCase( this string original )
        {
            if( String.IsNullOrEmpty( original ) )
                return original;

            string result = _properNameRx.Replace( original.ToLower( CultureInfo.CurrentCulture ), HandleWord );
            return result;
        }

        public static string WordToProperCase( this string word )
        {
            if( String.IsNullOrEmpty( word ) )
                return word;

            if( word.Length > 1 )
                return Char.ToUpper( word[0], CultureInfo.CurrentCulture ) + word.Substring( 1 );

            return word.ToUpper( CultureInfo.CurrentCulture );
        }

        private static readonly Regex _properNameRx = new Regex( @"\b(\w+)\b" );
        private static readonly string[] _prefixes = {
                                                         "mc"
                                                     };

        private static string HandleWord( Match m )
        {
            string word = m.Groups[1].Value;

            foreach( string prefix in _prefixes )
            {
                if( word.StartsWith( prefix, StringComparison.CurrentCultureIgnoreCase ) )
                    return prefix.WordToProperCase() + word.Substring( prefix.Length ).WordToProperCase();
            }

            return word.WordToProperCase();
        }
}

1

যদি আপনি vS2k8 ব্যবহার করে থাকেন তবে আপনি স্ট্রিং ক্লাসে এটি যুক্ত করতে একটি এক্সটেনশন পদ্ধতি ব্যবহার করতে পারেন:

public static string FirstLetterToUpper(this String input)
{
    return input = input.Substring(0, 1).ToUpper() + 
       input.Substring(1, input.Length - 1);
}

9
Char.ToUpper(input[0]) + input.Substring(1)আরও পাঠযোগ্য আইএমএইচও।
হোসাম অলি

আইএমএইচও input.FirstLetterToUpper()অবশ্যই খুব বেশি পঠনযোগ্য বনাম Char.ToUpper(input[0]) + input.Substring(1), তবে কম স্বচ্ছ
মাইকেল

0

বাইন করা হয়েছে এমন কিছু সমস্যা / সমস্যার সমাধানের জন্য আমি প্রথমে স্ট্রিংটিকে লোয়ার কেসে রূপান্তরিত করার পরামর্শ দেব এবং তারপরে টাইটিটলকেজ পদ্ধতিতে কল করব। তারপরে আরও নির্দিষ্ট মনোযোগের প্রয়োজন এমন বিশেষ কেসগুলি নির্ধারণ করতে আপনি সূচিপত্র ("ম্যাক") বা ইনডেক্সফ ("ও \ '") ব্যবহার করতে পারেন।

inputString = inputString.ToLower();
inputString = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(inputString);
int indexOfMc = inputString.IndexOf(" Mc");
if(indexOfMc  > 0)
{
   inputString.Substring(0, indexOfMc + 3) + inputString[indexOfMc + 3].ToString().ToUpper() + inputString.Substring(indexOfMc + 4);
}


0

আশা করি এটি আপনাকে সহায়তা করবে।

String fName = "firstname";
String lName = "lastname";
String capitalizedFName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(fName);
String capitalizedLName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lName);

0
 public static string ConvertToCaptilize(string input)
        {
            if (!string.IsNullOrEmpty(input))
            {
                string[] arrUserInput = input.Split(' ');


                // Initialize a string builder object for the output
                StringBuilder sbOutPut = new StringBuilder();


                // Loop thru each character in the string array
                foreach (string str in arrUserInput)
                {
                    if (!string.IsNullOrEmpty(str))
                    {
                        var charArray = str.ToCharArray();
                        int k = 0;
                        foreach (var cr in charArray)
                        {
                            char c;
                            c = k == 0 ? char.ToUpper(cr) : char.ToLower(cr);
                            sbOutPut.Append(c);
                            k++;
                        }


                    }
                    sbOutPut.Append(" ");
                }
                return sbOutPut.ToString();
            }
            return string.Empty;

        }

-1

এজ সূচিত মতো, বিশেষ নামগুলি হ্যান্ডেল করার জন্য আপনার আরও জটিল অ্যালগরিদম প্রয়োজন (এটি সম্ভবত অনেক জায়গাতেই সমস্ত কিছু উচ্চতর ক্ষেত্রে জোর করে)।

এই অনির্ধারিত সি # এর মতো কিছু আপনার অনুরোধ করা সহজ কেসটি পরিচালনা করতে হবে:

public string SentenceCase(string input)
{
    return input(0, 1).ToUpper + input.Substring(1).ToLower;
}

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