2013-06-22 7 views
13

मैं निम्नलिखित की कोशिश की:मैं एक स्ट्रिंग को एक निश्चित लंबाई से अधिक तक कैसे सीमित कर सकता हूं?

var Title = LongTitle.Substring(0,20) 

यह काम करता है लेकिन नहीं करता है, तो LongTitle मैं कैसे 20 वर्ण की एक अधिकतम करने तार सीमित कर सकते हैं लेकिन अगर वे सिर्फ उदाहरण के लिए कर रहे हैं एक त्रुटि नहीं मिल कम से कम 20 वर्ष की लंबाई है 5 अक्षर लंबा?

+4

चेक स्ट्रिंग की लंबाई, और अगर यह अधिक से अधिक 20 वर्ण काटना, अन्यथा यह छोड़ के रूप में है। – Tim

उत्तर

27

सुनिश्चित करें कि लंबाई से अधिक नहीं होगा LongTitle (null छोड़ी जाँच):

int maxLength = Math.Min(LongTitle.Length, 20); 
string title = LongTitle.Substring(0, maxLength); 

इस विस्तार विधि में बदल सकता है:

public static class StringExtensions 
{ 

    /// <summary> 
    /// Truncates string so that it is no longer than the specified number of characters. 
    /// </summary> 
    /// <param name="str">String to truncate.</param> 
    /// <param name="length">Maximum string length.</param> 
    /// <returns>Original string or a truncated one if the original was too long.</returns> 
    public static string Truncate(this string str, int length) 
    { 
     if(length < 0) 
     { 
      throw new ArgumentOutOfRangeException("length", "Length must be >= 0"); 
     } 

     if (str == null) 
     { 
      return null; 
     } 

     int maxLength = Math.Min(str.Length, length); 
     return str.Substring(0, maxLength); 
    } 
} 

इस्तेमाल किया जा सकता कौन सा रूप में:

string title = LongTitle.Truncate(20); 
+0

शायद विस्तार विधि में 'शून्य' की जांच भी कर रहा है? –

+1

@UweKeim इसे इंगित करने के लिए धन्यवाद, मैंने अपना जवाब – Zbigniew

+1

संपादित किया है, मैंने भी इसके लिए एक विस्तार विधि का उपयोग किया है, लेकिन मेरे कोड (और अल्पसंख्यक के लिए) रखने वाले अन्य लोगों के प्रति सम्मान से, क्या मैं एक और उपयुक्त सुझाव दे सकता हूं विधि हस्ताक्षर: Truncate (int maxLength) – Chris

8
string title = new string(LongTitle.Take(20).ToArray()); 
+6

+1 - साफ चाल :) – Tim

+5

नोट यह काफी अक्षम है क्योंकि यह एक मध्यवर्ती चार सरणी बनाता है जिसे तुरंत कॉपी और त्याग दिया जाता है। – Lee

+1

@Lee: आप सही हैं, लेकिन छोटी स्ट्रिंग के साथ, यह छोटा है –

5

यदि स्ट्रिंग की लंबाई 20 से बड़ी है, तो 20 का उपयोग करें, और लंबाई का उपयोग करें।

string title = LongTitle.Substring(0, 
    (LongTitle.Length > 20 ? 20 : LongTitle.Length)); 
+1

इस उद्देश्य के लिए Math.Min का उपयोग करना सीखें। – Chris

7

सबसे छोटा,:

var title = longTitle.Substring(0, Math.Min(20, longTitle.Length)) 
2

आप StringLength विशेषता का उपयोग कर सकते हैं। इस तरह कोई स्ट्रिंग संग्रहीत नहीं की जा सकती है जो निर्दिष्ट लंबाई की तुलना में लंबी (या छोटी) होती है।

देखें: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute%28v=vs.100%29.aspx

[StringLength(20, ErrorMessage = "Your Message")] 
public string LongTitle; 
संबंधित मुद्दे

 संबंधित मुद्दे