स्ट्रिंग में विशिष्ट वर्ण के बाद वर्ण निकालें, फिर सबस्ट्रिंग निकालें?


140

मुझे लगता है कि जब यह सरल लगता है, तो इसे डंबल पोस्ट करना पड़ता है और स्ट्रिंग्स / कैरेक्टर / रेगेक्स पर कई तरह के सवाल होते हैं, लेकिन मुझे वह नहीं मिला जिसकी मुझे जरूरत थी (एक अन्य भाषा को छोड़कर: सभी पाठ को निश्चित बिंदु के बाद हटा दें )।

मुझे निम्नलिखित कोड मिला है:

[Test]
    public void stringManipulation()
    {
        String filename = "testpage.aspx";
        String currentFullUrl = "http://localhost:2000/somefolder/myrep/test.aspx?q=qvalue";
        String fullUrlWithoutQueryString = currentFullUrl.Replace("?.*", "");
        String urlWithoutPageName = fullUrlWithoutQueryString.Remove(fullUrlWithoutQueryString.Length - filename.Length);

        String expected = "http://localhost:2000/somefolder/myrep/";
        String actual = urlWithoutPageName;
        Assert.AreEqual(expected, actual);
    }

मैंने ऊपर दिए गए प्रश्न में हल करने की कोशिश की (उम्मीद है कि सिंटैक्स समान होगा!) लेकिन नहीं। मैं पहले क्वेरीस्ट्रिंग को हटाना चाहता हूं जो किसी भी वैरिएबल की लंबाई हो सकती है, फिर पेज का नाम हटा दें, जो फिर से किसी भी लंबाई का हो सकता है।

मैं पूर्ण URL से क्वेरी स्ट्रिंग को कैसे निकाल सकता हूं जैसे कि यह परीक्षण पास करता है?

जवाबों:


265

स्ट्रिंग हेरफेर के लिए, यदि आप बस के बाद सब कुछ मारना चाहते हैं?, तो आप ऐसा कर सकते हैं

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.IndexOf("?");
if (index > 0)
   input = input.Substring(0, index);

संपादित करें: यदि अंतिम स्लैश के बाद सब कुछ, ऐसा कुछ करें

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.LastIndexOf("/");
if (index > 0)
    input = input.Substring(0, index); // or index + 1 to keep slash

वैकल्पिक रूप से, चूंकि आप एक URL के साथ काम कर रहे हैं, आप इस कोड के साथ कुछ कर सकते हैं

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1");
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty);

1
या यह अंतिम होगा /?
चार्ली साल्ट्स

4
ओह, हाँ, फिर से पढ़ें। वह उस मामले में LastIndexOf ("/") कर सकता है।
एंथनी पेग्राम

1
ऐसा करने के लिए दो तरीके प्रदान करने के लिए धन्यवाद x2!
स्वेनटोरींग

1
@gsvirdi, उस स्थिति में, आप उस URL को लोड कर सकते हैं Uri uriऔर फिर एक्सेस कर सकते हैं uri.Segments। यह एक सरणी लौटाएगा, और "somepage.aspx" अंतिम आइटम होगा।
एंथनी पेग्राम

1
मैं picky होने से नफरत करता हूं, लेकिन क्या इसे इंडेक्स> = 0 नहीं होना चाहिए?
जेनी ओ'रिली

103

पहले सब कुछ हटाने के लिए /

input = input.Substring(input.IndexOf("/"));

पहले के बाद सब कुछ निकालने के लिए /

input = input.Substring(0, input.IndexOf("/") + 1);

आखिरी से पहले सब कुछ हटाने के लिए /

input = input.Substring(input.LastIndexOf("/"));

आखिरी के बाद सब कुछ निकालने के लिए /

input = input.Substring(0, input.LastIndexOf("/") + 1);

एक निर्दिष्ट चार के बाद वर्णों को हटाने के लिए एक और अधिक सरल समाधान स्ट्रिंग का उपयोग करना है। रिम () विधि निम्नानुसार है:

पहले के बाद सब कुछ निकालने के लिए /

input = input.Remove(input.IndexOf("/") + 1);

आखिरी के बाद सब कुछ निकालने के लिए /

input = input.Remove(input.LastIndexOf("/") + 1);

7
ध्यान रखें कि यदि स्ट्रिंग में "/" बिल्कुल नहीं है तो ये सभी एक उदाहरण प्रस्तुत करेंगे। जाहिर है कि यह एक मुद्दा नहीं होगा यदि आप हार्ड-कोडिंग स्ट्रिंग्स के साथ काम कर रहे हैं जैसा कि मूल प्रश्न है, लेकिन ज्यादातर मामलों में, आप इसे ध्यान में रखना चाहेंगे।
एलिजर

7

यहाँ एक और सरल उपाय है। निम्न कोड '|' से पहले सबकुछ वापस कर देगा चरित्र:

if (path.Contains('|'))
   path = path.Split('|')[0];

वास्तव में, आप जितने चाहें उतने विभाजक हो सकते हैं, लेकिन यह मानते हुए कि आपके पास केवल एक पृथक्करण वर्ण है, यहाँ बताया गया है कि 'के बाद' आपको सब कुछ कैसे मिलेगा।

if (path.Contains('|'))
   path = path.Split('|')[1];

(कोड के दूसरे भाग में सभी बदल गया था) सरणी का सूचकांक था।)


6

उरी वर्ग आम तौर पर Urls में हेरफेर करने के लिए आपका सबसे अच्छा दांव है।


7
लिंक का एक उदाहरण अच्छा होगा।
ट्रेवर

1

एक विशिष्ट चार से पहले सब कुछ निकालने के लिए, नीचे का उपयोग करें।

string1 = string1.Substring(string1.IndexOf('$') + 1);

यह क्या है, $ चार से पहले सब कुछ लेता है और इसे हटा देता है। अब यदि आप किसी पात्र के बाद आइटम निकालना चाहते हैं, तो बस +1 को -1 में बदलें और आप सेट हैं!

लेकिन एक URL के लिए, मैं इसका उपयोग करने के लिए अंतर्निहित .NET क्लास का उपयोग करूंगा।


1

Request.QueryStringके parametersभीतर शामिल मूल्यों और मूल्यों को प्राप्त करने में आपकी सहायता करता हैURL

उदाहरण

string http = "http://dave.com/customers.aspx?customername=dave"
string customername = Request.QueryString["customername"].ToString();

इसलिए प्रचलित नाम चर के बराबर होना चाहिए

सादर


0

मैं दूसरा हाईटेकड्राइडर: आपके लिए पहले से निर्मित एक विशेष उरल वर्ग है।

हालाँकि, मुझे यह भी बताना चाहिए कि PHP का प्रतिस्थापन खोज पैटर्न के लिए नियमित अभिव्यक्ति का उपयोग करता है, जिसे आप .NET में भी कर सकते हैं - RegEx वर्ग को देखें।


0

आप .NET निकालने की विधि का उपयोग कर सकते हैं QueryString। अर्थात,Request.QueryString.Remove["whatever"];

यहाँ जो कुछ भी [] का नाम है querystringजिसे आप हटाना चाहते हैं।

यह कोशिश करो ... मुझे आशा है कि यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.