কোনও স্ট্রিংয়ের প্রথম অক্ষরকে মূলধন করে বাকী অংশটি কম করার কি সহজ উপায় আছে? পদ্ধতিতে কি অন্তর্নির্মিত আছে বা আমার নিজের তৈরি করার দরকার আছে?
কোনও স্ট্রিংয়ের প্রথম অক্ষরকে মূলধন করে বাকী অংশটি কম করার কি সহজ উপায় আছে? পদ্ধতিতে কি অন্তর্নির্মিত আছে বা আমার নিজের তৈরি করার দরকার আছে?
উত্তর:
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());
বিস্তারিত বর্ণনার জন্য এমএসডিএন লিঙ্কটি দেখুন ।
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");
sItem = Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(sItem.ToLower) 'first char upper case
CurrentCulture
আমরা কীভাবে নিশ্চিত হতে পারি যে এমন সংস্কৃতি নেই যা এটিকে ভিন্নভাবে পরিচালনা করে?
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());
কিছু ক্ষেত্রে রয়েছে যা 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
\b[ivxlcdm]+$|
সুতরাং আপনার আছে \b[ivxlcdm]+$|(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)
। এটি একটি কঠোর রোমান অঙ্কের বিন্যাস ( ivxlcdm
) না থাকা একটি নামের সমস্ত শেষ শব্দকে উচ্চারণ করবে । তবে আপনার কিছু অনাকাঙ্ক্ষিত ফলাফল থাকতে পারে, উদাহরণস্বরূপ 'লি' 'এলআই' হয়ে যাবে
Regex.Replace("JOHN DOE".ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)", m => m.Value.ToUpper())
ম্যাক এবং ম্যাক সমগ্র মার্কিন যুক্তরাষ্ট্রে প্রচলিত উপাধি রয়েছে, এবং আরও কিছু রয়েছে। 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;
}
ToTitleCase () আপনার জন্য কাজ করা উচিত।
সর্বাধিক প্রত্যক্ষ বিকল্পটি টটিটলকেস ফাংশনটি ব্যবহার করতে চলেছে যা .NET এ উপলব্ধ যা নামটির বেশিরভাগ সময় যত্ন নেওয়া উচিত। হিসাবে edg নির্দিষ্ট কিছু নাম এটি কার্যকরী হবে না, কিন্তু এই মোটামুটি বিরল তাই যদি না আপনি একটি সংস্কৃতি যেখানে যেমন নাম এটা প্রয়োজনীয় কিছু অত্যধিক সম্পর্কে চিন্তা করতে হবে নয় সাধারণ লক্ষ্য করে করা হয়।
তবে আপনি যদি নেট নেট লগে কাজ না করে থাকেন তবে এটি ইনপুটটি কেমন দেখাচ্ছে তার উপর নির্ভর করে - যদি আপনার প্রথম নাম এবং শেষ নামের জন্য দুটি পৃথক ক্ষেত্র থাকে তবে আপনি কেবলমাত্র প্রথম অক্ষরটি এটির বাকী অংশটি নীচে রেখে বড় করে তুলতে পারবেন সাবস্ট্রিং।
firstName = firstName.Substring(0, 1).ToUpper() + firstName.Substring(1).ToLower();
lastName = lastName.Substring(0, 1).ToUpper() + lastName.Substring(1).ToLower();
তবে, যদি আপনাকে একই স্ট্রিংয়ের অংশ হিসাবে একাধিক নাম সরবরাহ করা হয় তবে আপনাকে কীভাবে তথ্য পাচ্ছেন তা জানতে হবে এবং সেই অনুযায়ী এটি বিভক্ত করতে হবে । সুতরাং আপনি যদি "জন দো" এর মতো কোনও নাম পেয়ে থাকেন তবে স্থানের অক্ষরের উপর ভিত্তি করে স্ট্রিংকে আলাদা করুন। যদি এটি "ডো, জন" এর মতো ফর্ম্যাটে থাকে তবে আপনাকে এটি কমা ভিত্তিতে বিভক্ত করতে হবে। যাইহোক, একবার এটি আলাদা হয়ে গেলে আপনি কেবল আগে দেখানো কোডটি প্রয়োগ করুন।
সংস্কৃতিআইনফোর.কন্টেনচারালচার.টেক্সটইনফো.টো টাইটেলক্যাস ("আমার নাম");
ফেরত দেয় ~ আমার নাম
তবে সমস্যাটি এখনও রয়েছে ম্যাকফ্লাইয়ের মতো নাম নিয়ে যেমন আগেই বলা হয়েছে।
এটি ঠিক করার জন্য আমি আমার নিজস্ব পদ্ধতি ব্যবহার করি:
উদাহরণস্বরূপ বাক্যাংশ: "হ্যালো ওয়ার্ল্ড। হ্যালো এটি স্ট্যাকওভারফ্লো ওয়ার্ল্ড।" "হ্যালো ওয়ার্ল্ড 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;
}
ToTitleCase ব্যবহার করার পরামর্শগুলি সমস্ত বড় হাতের স্ট্রিংয়ের জন্য কাজ করবে না। সুতরাং আপনাকে প্রথম চরটিতে টুপার এবং বাকী অক্ষরগুলিতে টোলওয়ার কল করতে হবে।
এই ক্লাসটি কৌশলটি করে। আপনি _প্রিফিক্স স্ট্যাটিক স্ট্রিং অ্যারেতে নতুন উপসর্গ যুক্ত করতে পারেন ।
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();
}
}
যদি আপনি vS2k8 ব্যবহার করে থাকেন তবে আপনি স্ট্রিং ক্লাসে এটি যুক্ত করতে একটি এক্সটেনশন পদ্ধতি ব্যবহার করতে পারেন:
public static string FirstLetterToUpper(this String input)
{
return input = input.Substring(0, 1).ToUpper() +
input.Substring(1, input.Length - 1);
}
Char.ToUpper(input[0]) + input.Substring(1)
আরও পাঠযোগ্য আইএমএইচও।
input.FirstLetterToUpper()
অবশ্যই খুব বেশি পঠনযোগ্য বনাম Char.ToUpper(input[0]) + input.Substring(1)
, তবে কম স্বচ্ছ
বাইন করা হয়েছে এমন কিছু সমস্যা / সমস্যার সমাধানের জন্য আমি প্রথমে স্ট্রিংটিকে লোয়ার কেসে রূপান্তরিত করার পরামর্শ দেব এবং তারপরে টাইটিটলকেজ পদ্ধতিতে কল করব। তারপরে আরও নির্দিষ্ট মনোযোগের প্রয়োজন এমন বিশেষ কেসগুলি নির্ধারণ করতে আপনি সূচিপত্র ("ম্যাক") বা ইনডেক্সফ ("ও \ '") ব্যবহার করতে পারেন।
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);
}
আমি এইভাবে পছন্দ করি:
using System.Globalization;
...
TextInfo myTi = new CultureInfo("en-Us",false).TextInfo;
string raw = "THIS IS ALL CAPS";
string firstCapOnly = myTi.ToTitleCase(raw.ToLower());
এই এমএসডিএন নিবন্ধ থেকে উত্সাহিত ।
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;
}
এজ সূচিত মতো, বিশেষ নামগুলি হ্যান্ডেল করার জন্য আপনার আরও জটিল অ্যালগরিদম প্রয়োজন (এটি সম্ভবত অনেক জায়গাতেই সমস্ত কিছু উচ্চতর ক্ষেত্রে জোর করে)।
এই অনির্ধারিত সি # এর মতো কিছু আপনার অনুরোধ করা সহজ কেসটি পরিচালনা করতে হবে:
public string SentenceCase(string input)
{
return input(0, 1).ToUpper + input.Substring(1).ToLower;
}