2010-08-25 16 views
105

में एक स्ट्रिंग के पहले अक्षर को ट्रांसफॉर्म करें, मैं एक ऐसी विधि बनाना चाहता हूं जो स्ट्रिंग के पहले अक्षर को कम मामले में बदल देती है।बेस्ट प्रैक्टिस - कम केस

मेरे दृष्टिकोण:

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)); 
} 

अपने दृष्टिकोण क्या होगा?

उत्तर

176

मैं इस का प्रयोग करेंगे:

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

आपका पहला समाधान अनुकूल नहीं है: String.Format धीमी है और आप इसकी आवश्यकता नहीं है यदि आप किसी ऐसे स्वरूप कभी नहीं बदल जाएगा।

दूसरा बदसूरत और रखरखाव योग्य नहीं है।

+3

मैं इसे करना होगा:। 'Char.ToLower (नाम [0]) toString() + name.Substring (1)' – Andrey

+0

हाँ, मैं सिर्फ मेरा उत्तर अद्यतन करने गया था, धन्यवाद – onof

+0

मैंने सोचा था कि के concatination + ऑपरेटर के साथ स्ट्रिंग धीमी और बदसूरत है, है ना? – Rookian

3

मेरा

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

मैं उत्सुक हूं, क्यों 'val.Remove'? मेरे लिए थोड़ा सा अंतर्ज्ञानी लगता है। – Thorarin

+0

@ थोरिनिन स्पष्ट रूप से क्योंकि आप वास्तव में कुछ भी करने की आवश्यकता है या नहीं, यह जांचने के लिए कि आप पहले चार को हटा देना चाहते हैं (क्योंकि आप सामने वाले मामले को कम कर रहे हैं) – riki

44

स्थिति पर निर्भर करता है, एक छोटे से रक्षात्मक प्रोग्रामिंग वांछनीय हो सकता है:

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 का उपयोग करके यह अधिक है।

+7

+1। :) – Chris

+0

अगर मैं गलत हूं तो मुझे सही करें लेकिन str.Substring (1) इस स्थिति के लिए गणना के रूप में स्थिति 1 पर प्रतीक वापस कर देगा। तो आपके पास निम्न मामले में char [0] होगा + स्थिति में char 1 इसलिए मैं स्ट्रिंग में पहले चार से शुरू होने वाले एक char को हटाना पसंद करता था। परिणाम पहले अक्षर के बिना स्ट्रिंग है। फिर मैं इस स्ट्रिंग को पहले चार में जोड़ दूंगा जो कम केस – fedotoves

+2

@ बी-रेन में परिवर्तित हो गया है: अपने आप को सही मानें: http://msdn.microsoft.com/en-us/library/hxthx5h6%28VS.90%29.aspx – Thorarin

2

मुझे स्वीकार्य उत्तर पसंद है, लेकिन string.IsNullOrEmpty की जांच के बगल में मैं यह भी जांचूंगा कि Char.IsLower(name[1]) यदि आप संक्षिप्त नाम से निपट रहे हैं तो। जैसे आप "एड्स" बनने के लिए "एड्स" नहीं बनना चाहेंगे।

+3

आईएमओ यह कॉलर की ज़िम्मेदारी है – onof

-2

स्ट्रिंग। कॉनकैट का उपयोग करना बेहतर है। अगर आप जानते हैं कि प्रारूप डेटा नहीं बदल रहा है, और बस concatenation वांछित है।

4

बस अगर यह किसी भी व्यक्ति की मदद करता है जो इस उत्तर में ठोकर खाता है।

मुझे लगता है कि यह एक विस्तार विधि के रूप में सबसे अच्छा होगा, तो आप इसे अपनेString.FirstCharacterToLower() के साथ कॉल कर सकते हैं;

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); 
    } 
} 
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; 
संबंधित मुद्दे