2012-10-17 21 views
9

अगर मैं निम्नलिखित स्ट्रिंग है:आशुलिपि रास्ता

/lorem/ipsum/मातम

और मैं इस बनना चाहते हैं:

/lorem/ipsum

क्या शॉर्ट हाथ वा है आखिरी फॉरवर्ड स्लैश को हटाने के बाद, और उसके बाद के सभी पात्र?

मुझे पता है कि मैं स्ट्रिंग को List<> में विभाजित करके और अंतिम आइटम को हटाकर और फिर इसमें शामिल होने के तरीके से कैसे कर सकता हूं, लेकिन क्या यह लिखने का एक छोटा तरीका है?

मेरा प्रश्न यूआरएल विशिष्ट नहीं है।

+1

यह आप कैसे domain.com/ या domain.com/lorem/ipsum/dolor/ – ZombieSheep

+2

के बारे में क्या 'domain.com/lorem/ipsum? पथ = /' तरह यूआरएल हैंडल करना चाहते हैं पर निर्भर करेगा? – SLaks

+0

कृपया इस तथ्य को अनदेखा करें। इस – Curt

उत्तर

30

आप उपयोग कर सकते हैं Substring() और LastIndexOf():

str = str.Substring(0, str.LastIndexOf('/')); 

संपादित (सुझाव टिप्पणी)
किसी भी मुद्दे को रोकने के लिए जब स्ट्रिंग एक / शामिल नहीं हो सकता, आप की तरह कुछ इस्तेमाल कर सकते हैं:

int lastSlash = str.LastIndexOf('/'); 
str = (lastSlash > -1) ? str.Substring(0, lastSlash) : str; 

एक temp-variable में स्थिति संग्रहीत करने से .LastIndexOf('/') को दो बार कॉल करने की आवश्यकता को रोक दिया जाएगा, लेकिन इसे इसके बजाय एक लाइन समाधान के पक्ष में छोड़ दिया जा सकता है।

+2

आप जांचना चाहते हैं कि 'LastIndexOf' वापस नहीं आया है -1 परिणाम का उपयोग करने से पहले, या अन्यथा _BANG! _ –

+0

@GrantThomas नोट के लिए धन्यवाद; मैंने इस पर ध्यान देने के लिए मेरे उत्तर में एक सुझाए गए संपादन अद्यतन को जोड़ा है। – newfurniturey

+0

@ नया विवरण धन्यवाद! एक इलाज करता है। ताकि मैं इसे एक ही पंक्ति में शामिल कर सकूं (मेरे द्वारा किए गए 'आखिरी स्लैश' ऑब्जेक्ट की आवश्यकता के बिना: 'string.Contains ("/")? [आपका तर्क]: null'। (मैं खुश हूं अगर कोई फॉरवर्ड नहीं होता है तो वापस लौटने के लिए एक नल)। चीयर्स फिर से! – Curt

7

आप str.Remove(str.LastIndexOf("/")) जैसे कुछ कर सकते हैं, लेकिन आप जो भी चाहते हैं उसे करने के लिए कोई अंतर्निहित विधि नहीं है।

संपादित करें: आप भी, निर्देशिका पार करने के लिए उरी वस्तु इस्तेमाल कर सकते हैं, हालांकि यह नहीं देता है कि वास्तव में आप क्या चाहते हैं:

Uri baseUri = new Uri("http://domain.com/lorem/ipsum/dolor"); 
Uri myUri = new Uri(baseUri, "."); 
// myUri now contains http://domain.com/lorem/ipsum/ 
2

आप regex /[^/]*$ का उपयोग करें और रिक्त स्ट्रिंग से बदल सकते हैं:

var fixed = new Regex("/[^/]*$").Replace("domain.com/lorem/ipsum/dolor", "") 

लेकिन यह शायद यहां पर अधिक है। Substring के LastIndexOf के साथ @ newfurniturey का उत्तर शायद सबसे अच्छा है।

3

एक आसान तरीका होगा

String s = "domain.com/lorem/ipsum/dolor"; 
    s = s.Substring(0, s.LastIndexOf('/')); 
    Console.WriteLine(s); 

एक और शायद

String s = "domain.com/lorem/ipsum/dolor"; 
s = s.TrimEnd('/'); 
Console.WriteLine(s); 
+0

ट्रिमइम काम नहीं करता है। यह अंत में "/" को हटा देगा लेकिन यह अंतिम उपस्थिति के बाद पाठ को नहीं हटाएगा। – Chris

0
 while (input.Last() == '/' || input.Last() == '\\') 
     { 
      input = input.Substring(0, input.Length - 1); 
     } 
+0

जबकि यह कोड उत्तर दे सकता है प्रश्न, कुछ संदर्भ शामिल करना बेहतर होगा, यह बताएगा कि यह कैसे काम करता है, और इसका उपयोग कब करें। इसका वर्णन केवल लंबे समय तक उपयोगी नहीं है। – ryanyuyu

2

मैं इस तरह सामान के लिए एक स्ट्रिंग एक्सटेंशन बनाना चाहते:

/// <summary> 
/// Returns with suffix removed, if present 
/// </summary> 
public static string TrimIfEndsWith(
    this string value, 
    string suffix) 
{ 
    return 
     value.EndsWith(suffix) ? 
      value.Substring(0, value.Length - suffix.Length) : 
      value; 
} 

तब आप इस तरह प्रयोग करें:

var myString = "/lorem/ipsum/dolor"; 
myStringClean = myString.TrimIfEndsWith("/dolor"); 

अब आप अपनी परियोजनाओं है कि एक अनुगामी चरित्र या एक से अधिक दूर करने के लिए इस्तेमाल किया जा सकता के सभी भर में एक फिर से प्रयोग करने योग्य एक्सटेंशन मौजूद है।

4

यदि यूआरएल के अंत में '/' है, तो इसे हटा दें। यदि नहीं; बस मूल को वापस करें।

var url = this.Request.RequestUri.ToString(); 
url = url.EndsWith("/") ? url.Substring(0, url.Length - 1) : url; 
url += @"/mycontroller"; 
0

धन्यवाद आपके प्रश्न के लिए @ कर्ट। मैंने थोड़ा @ newfurniturey के कोड में सुधार किया, और यहां मेरा संस्करण है।

if(str.Contains('/')){ 
     str = str.Substring(0, str.LastIndexOf('/')); 
} 
संबंधित मुद्दे