সমস্ত প্রথম অক্ষরকে আপার ক্ষেত্রে রূপান্তর করুন, প্রতিটি শব্দের জন্য নীচে বিশ্রাম দিন


110

আমার কাছে পাঠ্যের একটি স্ট্রিং রয়েছে (প্রায় 5-6 টি শব্দ প্রায়শই) যা আমাকে রূপান্তর করতে হবে।

বর্তমানে পাঠ্যটির মতো দেখাচ্ছে:

THIS IS MY TEXT RIGHT NOW

আমি এটিকে রূপান্তর করতে চাই:

This Is My Text Right Now

আমি আমার স্ট্রিংয়ের সংগ্রহটি লুপ করতে পারি, তবে কীভাবে এই পাঠ্য সংশোধনটি করা যায় তা নিশ্চিত নই।

উত্তর:


251
string s = "THIS IS MY TEXT RIGHT NOW";

s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

31
হাহা সত্যিই? এটা কোথায়? আমি .NET পছন্দ করি তবে কিছু এপিআই ডিজাইনার হ'ল আসল erেউ।
জর্জ মাউর

7
নোট করুন যে এই পদ্ধতিটি প্রশ্নকারীর জিজ্ঞাসা অনুসারে যা করবে, এটি একটি নির্লজ্জ অ্যালগরিদম যা কেবল প্রতিটি শব্দকে মূলধন করে তোলে, এটি কোন ধরণের শব্দ কী তা বিবেচনা না করেই। এটি সত্যই "শিরোনাম কেস" নয় কারণ শিরোনাম কেসিংয়ের নিয়মগুলি বিভিন্ন ভাষায় পৃথক। এটি ইংরেজির পক্ষেও সঠিক নয়। উদাহরণস্বরূপ, "ছেলের সম্পর্কে" শিরোনামটি ইংরেজিতে "About a Boy" হওয়া উচিত, তবে এই পদ্ধতিটি "About A Boy" দেয়। আপনি যদি সত্য শিরোনামের ক্ষেত্রে চান তবে আপনাকে নিজের পদ্ধতি লিখতে হবে।
রায়ান লুন্ডি

18
আমি তাদের জোকস বলব না। "টোটিটেলকেস" এর জিনিসটি এটি সংস্কৃতি নির্ভর, তাই এটি সিস্টেমের মধ্যে থাকতে হবে lo গ্লোবালাইজেশন নেমস্পেসে। কারেন্টথ্রেডের মধ্য দিয়ে যাবার জন্য কেবল থ্রেডের বর্তমান সংস্কৃতিটি পাওয়ার জন্য সম্পন্ন করা হয়েছে (সচেতন থাকুন যে ব্যবহারকারীর আলাদা লোকাল থাকলে এটি বিভিন্ন আচরণের কারণ হতে পারে!)। আপনি পাশাপাশি "সংস্কৃতিআইনফো.ইন্টারভিনিটক্লাচার.টেক্সট ইনফো.টোটিটেলক্যাস ()" করতে পারেন, যা ইনভায়ারেন্ট কালচার সমস্ত সংস্কৃতিতে একই আচরণ করে বলে ভাল হতে পারে। আগ্রহের বাইরে জর্জ: আপনি একটি সংস্কৃতি-নির্দিষ্ট স্ট্রিং ফাংশন কোথায় রাখবেন?
মাইকেল স্টাম

3
সমস্ত UPPERCASE স্ট্রিং সম্পর্কে মন্তব্যগুলিও দ্রষ্টব্য: এমএসডিএন.মাইক্রোসফটকম
মাইকেল স্টুম

2
টুলওয়ারের পদ্ধতিটি () হতে হবে ToLower (), প্রথম অক্ষরটি বড় হাতের সাথে শুরু হবে
অ্যালেক্স

84

আমি সম্ভবত ডাকা পছন্দ ToTitleCase থেকে CultureInfo ( System.Globalization ) তুলনায় Thread.CurrentThread ( System.Threading )

string s = "THIS IS MY TEXT RIGHT NOW";
s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

তবে এটি jspcal সমাধানের মতো হওয়া উচিত

সম্পাদনা

আসলে সেই সমাধানগুলি এক নয় : CurrentThread- কল -> CultureInfo!


System.Threading.Thread.CurrentThread.CurrentCulture

string s = "THIS IS MY TEXT RIGHT NOW";
s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

IL_0000:  ldstr       "THIS IS MY TEXT RIGHT NOW"
IL_0005:  stloc.0     // s
IL_0006:  call        System.Threading.Thread.get_CurrentThread
IL_000B:  callvirt    System.Threading.Thread.get_CurrentCulture
IL_0010:  callvirt    System.Globalization.CultureInfo.get_TextInfo
IL_0015:  ldloc.0     // s
IL_0016:  callvirt    System.String.ToLower
IL_001B:  callvirt    System.Globalization.TextInfo.ToTitleCase
IL_0020:  stloc.0     // s

System.Globalization.CultureInfo.CurrentCulture

string s = "THIS IS MY TEXT RIGHT NOW";
s = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

IL_0000:  ldstr       "THIS IS MY TEXT RIGHT NOW"
IL_0005:  stloc.0     // s
IL_0006:  call        System.Globalization.CultureInfo.get_CurrentCulture
IL_000B:  callvirt    System.Globalization.CultureInfo.get_TextInfo
IL_0010:  ldloc.0     // s
IL_0011:  callvirt    System.String.ToLower
IL_0016:  callvirt    System.Globalization.TextInfo.ToTitleCase
IL_001B:  stloc.0     // s

তথ্যসূত্র:


16

স্ট্রিংয়ের প্রথম চরটিকে আপার কেস রূপান্তর করতে বেশ কয়েকটি উপায় রয়েছে।

প্রথম উপায়টি এমন একটি পদ্ধতি তৈরি করা যা কেবল প্রথম চরটি ক্যাপ করে এবং স্ট্রিং ব্যবহার করে বাকী স্ট্রিং যুক্ত করে:

public string UppercaseFirst(string s)
    {
        return char.ToUpper(s[0]) + s.Substring(1);
    }

দ্বিতীয় উপায় (যা কিছুটা দ্রুত) হ'ল স্ট্রিংটিকে একটি চর অ্যারে বিভক্ত করা এবং তারপরে স্ট্রিংটি পুনরায় তৈরি করা:

public string UppercaseFirst(string s)
    {
        char[] a = s.ToCharArray();
        a[0] = char.ToUpper(a[0]);
        return new string(a);
    }

1
এই সমাধানটি যথাযথভাবে প্রশ্নের উত্তর দেয় না। প্রশ্নের শিরোনাম হ'ল "সমস্ত প্রথম অক্ষরকে আপার ক্ষেত্রে রূপান্তর করুন, প্রতিটি শব্দের জন্য কম বিশ্রাম দিন"। যাইহোক, এই সমাধানটি কেবল পুরো স্ট্রিংয়ের প্রথম অক্ষরকে মূলধন করে। সুতরাং, এই সমাধানটি "হ্যালো ওয়ার্ল্ড" পরিবর্তে "হ্যালো ওয়ার্ল্ড" তে পরিবর্তিত করবে "হ্যালো ওয়ার্ল্ড"।
brsfan

9

স্বাক্ষরিত তবে এর মতো কিছু কাজ করা উচিত:

var phrase = "THIS IS MY TEXT RIGHT NOW";
var rx = new System.Text.RegularExpressions.Regex(@"(?<=\w)\w");
var newString = rx.Replace(phrase,new MatchEvaluator(m=>m.Value.ToLowerInvariant()));

মূলত এটি বলে যে "একটি বর্ণমালার চরিত্রের সমস্ত উপস্থিতিতে একটি রেজেক্স ম্যাচ প্রিফর্ম করে যা অন্য বর্ণানুক্রমিক চরিত্র অনুসরণ করে এবং তারপরে এটি নিজের একটি ছোট হাতের সংস্করণ দিয়ে প্রতিস্থাপন করে"


এইটি সমস্ত বড় হাতের শব্দগুলি বড় হাতের সাথে শুরু করে ছোট হাতের সাথে চালিয়ে যায়। ঠিক আমি খুঁজছেন ছিল কি.
এম আজ्योকসুল

9

আপনি যদি কোনও ওয়েব পৃষ্ঠায় ব্যবহার করছেন তবে আপনি সিএসএসও ব্যবহার করতে পারেন:

style="text-transform:capitalize;"


2
সিএসএস কেন? যখন প্রশ্নটি সি # এ্যাস্প নেট নেটওয়ার্কের
জয়

1
ট্যাগটি ASP.NETদেখায় যে ওপ ওয়েবে এটি করছে। অবশ্যই এটি প্রশ্নের উত্তর নয় কারণ ওপিতে সমাধানের প্রয়োজন ছিল C#তবে এটি সমস্যার সমাধান করে এবং এটি বিকল্প সমাধান হতে পারে। +1
মুহাম্মদ সাকিব

6

বড় টেবিলগুলির গতি তৈরি করা যখন উদ্বেগজনক হয় তাই জেমি ডিকসনের দ্বিতীয় ফাংশনটি সবচেয়ে ভাল তবে এটি পুরোপুরি যেমন কাজ করে না ...

এটি সমস্ত অক্ষর ছোট হাতের অক্ষরে নিতে ব্যর্থ হয় এবং এটি কেবল স্ট্রিংয়ের প্রথম অক্ষরকেই বড় করে তোলে, স্ট্রিংয়ের প্রতিটি শব্দের প্রথম অক্ষর নয় ... নীচের বিকল্পটি উভয় সমস্যার সমাধান করে:

    public string UppercaseFirstEach(string s)
    {
        char[] a = s.ToLower().ToCharArray();

        for (int i = 0; i < a.Count(); i++ )
        {
            a[i] = i == 0 || a[i-1] == ' ' ? char.ToUpper(a[i]) : a[i];

        }

        return new string(a);
    }

যদিও এই মুহুর্তে, এটি এখনও দ্রুততম বিকল্প কিনা তা অনিশ্চিত, Regexজর্জ মাউয়ারের প্রদত্ত সমাধানটি দ্রুততর হতে পারে ... যে কেউ যথেষ্ট যত্নশীল তা পরীক্ষা করা উচিত।


2
এটি কাজ করে, তবে আমি এই "a.Count ()" এ এ লেন্থে পরিবর্তন করেছি
খ্রিস্টান

2

আমি জানি না যে নীচের সমাধানটি jspcal এর উত্তরের চেয়ে কম বা কম দক্ষ কিনা, তবে আমি নিশ্চিত যে এটির জন্য জেমি এবং জর্জ এর চেয়ে কম বস্তু তৈরির প্রয়োজন।

string s = "THIS IS MY TEXT RIGHT NOW";
StringBuilder sb = new StringBuilder(s.Length);
bool capitalize = true;
foreach (char c in s) {
    sb.Append(capitalize ? Char.ToUpper(c) : Char.ToLower(c));
    capitalize = !Char.IsLetter(c);
}
return sb.ToString();

1
যদি আমরা অবজেক্ট তৈরির সাথে সম্পর্কিত হয়ে থাকি তবে স্ট্রিংবিল্ডার ব্যবহার না করে লুপ ইনডেক্সিংয়ের জন্য কেন এটি জায়গায় রাখবেন না?
jball

0

প্রথম উত্তর ছাড়াও, শব্দের শেষে স্ট্রিং সিলেকশন স্টার্ট সূচিটি পরিবর্তন করতে ভুলবেন না আপনি স্ট্রিংয়ে অক্ষরের বিপরীত ক্রম পাবেন।

s.SelectionStart=s.Length;

0

এই কৌশলটি চেষ্টা করে দেখুন; এটি পছন্দসই ফলাফল দেয়

CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());

এবং ব্যবহার করতে ভুলবেন না System.Globalization


0

আপনার আগ্রহী হতে পারে এমন সম্ভাব্য সমাধানগুলির মধ্যে একটি right এক লুপের মধ্যে ডান থেকে বাম এবং উর্ধ্বমুখী অক্ষরের একটি অ্যারে ট্র্যাভার করে।

public static string WordsToCapitalLetter(string value)
    {
        if (string.IsNullOrWhiteSpace(value))
        {
            throw new ArgumentException("value");
        }

        int inputValueCharLength = value.Length;
        var valueAsCharArray = value.ToCharArray();

        int min = 0;
        int max = inputValueCharLength - 1;

        while (max > min)
        {
            char left = value[min];
            char previousLeft = (min == 0) ? left : value[min - 1];

            char right = value[max];
            char nextRight = (max == inputValueCharLength - 1) ? right : value[max - 1];

            if (char.IsLetter(left) && !char.IsUpper(left) && char.IsWhiteSpace(previousLeft))
            {
                valueAsCharArray[min] = char.ToUpper(left);
            }

            if (char.IsLetter(right) && !char.IsUpper(right) && char.IsWhiteSpace(nextRight))
            {
                valueAsCharArray[max] = char.ToUpper(right);
            }

            min++;
            max--;
        }

        return new string(valueAsCharArray);
    }

0

স্ট্রিং এক্সটেনশন হিসাবে jspcal এর উত্তর

Program.cs

class Program
{
    static void Main(string[] args)
    {
        var myText = "MYTEXT";
        Console.WriteLine(myText.ToTitleCase()); //Mytext
    }
}

StringExtensions.cs

using System;
public static class StringExtensions
{

    public static string ToTitleCase(this string str)
    {
        if (str == null)
            return null;

        return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.