2012-06-21 18 views
17

के भीतर एक स्थान का उल्लेख करना चाहिए मैं एक स्ट्रिंग है लगता है किसी # - सबस्ट्रिंग: सूचकांक और लंबाई स्ट्रिंग

string url = "www.example.com/aaa/bbb.jpg"; 

"www.example.com/" 18 लंबाई में ठीक किया गया है।

string newString = url.Substring(18, url.Length - 4); 

तो: मैं इस स्ट्रिंग से "aaa/bbb" भाग प्राप्त करना चाहते हैं

इसलिए यहाँ

मैं क्या किया है (वास्तविक यूआरएल नहीं है और न ही उदाहरण AAA/bbb, लंबाई भिन्न हो सकते हैं, हालांकि) मुझे अपवाद मिला: अनुक्रमणिका और लंबाई स्ट्रिंग के भीतर किसी स्थान को संदर्भित करनी चाहिए। मेरे कोड में क्या गलत है और इसे कैसे ठीक किया जाए? अग्रिम में धन्यवाद।

+2

सबस्ट्रिंग के लिए तर्क हैं (startIndex, लंबाई)। मुझे यकीन नहीं है कि आप जिस वस्तु को चाहते हैं उसके लिए आपको 18 और लंबाई -4 कहां मिल रही है। –

+1

शुरुआती "www.xxx.com/" के लिए खाते में 18 को घटाए जाने की आवश्यकता है संपादित करें: मेरा मतलब है, 12।आपका 18 होना चाहिए 12 :) –

+0

क्या आप इसके बजाय System.Uri (http://msdn.microsoft.com/en-us/library/system.uri.aspx) कक्षा का उपयोग कर सकते हैं? –

उत्तर

34

Substring में दूसरा पैरामीटर सबस्ट्रिंग की लंबाई है, अंत सूचकांक नहीं।

आपको शायद यह जांचने के लिए हैंडलिंग शामिल करना चाहिए कि यह वास्तव में आपके द्वारा अपेक्षित चीज़ों के साथ शुरू होता है, जो आप उम्मीद करते हैं उसके साथ समाप्त होता है, और कम से कम जब तक आप अपेक्षा करते हैं। और फिर यदि यह मेल नहीं खाता है, तो आप या तो कुछ और कर सकते हैं या एक सार्थक त्रुटि फेंक सकते हैं।

var prefix = "www.example.com/"; 
var suffix = ".jpg"; 
string url = "www.example.com/aaa/bbb.jpg"; 

if (url.StartsWith(prefix) && url.EndsWith(suffix) && url.Length >= (prefix.Length + suffix.Length)) 
{ 
    string newString = url.Substring(prefix.Length, url.Length - prefix.Length - suffix.Length); 
    Console.WriteLine(newString); 
} 
else 
    //handle invalid state 
+1

हाँ, लेकिन मंडो ".jpg" भाग को डंप करना चाहता है। –

+0

ओह, ओह, मेरी गलती। मैं इसे ठीक कर दूंगा। –

+0

यूआरएल। लम्बाई - 22 ??? आपको वह नंबर कैसे मिला? – walther

6

आपका गलती सबस्ट्रिंग के मानकों है:

यहाँ कुछ उदाहरण कोड इस बात को मान्य यूआरएल अपने तार है, वह भी एक सा पुनर्संशोधित है यह आसान पट्टी उपसर्ग/प्रत्यय को बदलने के लिए बनाने के लिए होता है, जो है। पहला पैरामीटर प्रारंभ सूचकांक होना चाहिए और दूसरा startindex से लंबाई या ऑफसेट होना चाहिए।

string newString = url.Substring(18, 7); 

यदि सबस्ट्रिंग की लंबाई भिन्न हो सकती है तो आपको लंबाई की गणना करने की आवश्यकता होती है। (url.Length - 18) - 4 (या url.Length - 22)

की दिशा अंत में में

कुछ यह इस

string newString = url.Substring(18, url.Length - 22); 
+0

"aaa/bbb" भाग की लंबाई समय-समय पर भिन्न होती है, इसलिए यह बिल्कुल ठीक नहीं है 7. लेकिन मेरे प्रश्न का उत्तर देने के लिए धन्यवाद। आपके उत्तर को ऊपर उठाया :) – Manto

+0

22 सही है, क्योंकि आप लंबाई जानना चाहते हैं, सूचकांक – walther

2

कुछ ऐसी दिखाई देगी यह प्रयास करें:

int positionOfJPG=url.IndexOf(".jpg"); 
string newString = url.Substring(18, url.Length - positionOfJPG); 
3

आप स्थिति को खोजने की जरूरत पहले / का, और उसके बाद इच्छित भाग की गणना करें:

string url = "www.example.com/aaa/bbb.jpg"; 
int Idx = url.IndexOf("/"); 
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4); 
2
string newString = url.Substring(18, (url.LastIndexOf(".") - 18)) 
+0

हाँ जो काम करता है। – Manto

0

यहां एक और सुझाव है। आप पहले जोड़ें कर सकते हैं http: अपने यूआरएल स्ट्रिंग के लिए // आप कैसे कुछ इस तरह के बारे में इस

string path = "http://www.example.com/aaa/bbb.jpg"; 
    Uri uri = new Uri(path);    
    string expectedString = 
     uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf(".")); 
5

कर सकते हैं:

string url = "http://www.example.com/aaa/bbb.jpg"; 
Uri uri = new Uri(url); 
string path_Query = uri.PathAndQuery; 
string extension = Path.GetExtension(path_Query); 

path_Query = path_Query.Replace(extension, string.Empty);// This will remove extension 
+0

अच्छा समाधान पूरी तरह से हैकी स्ट्रिंग इंडेक्सिंग के बजाय लाइब्रेरी फ़ंक्शंस पर निर्भर करता है जो इसे अधिक पठनीय और अधिक मजबूत बनाता है। –

0

आप गद्दी सही उपयोग कर सकते हैं।

string url = "www.example.com/aaa/bbb.jpg"; 
string newString=url.PadRight(4); 
string newString = (url.Substring(18, url.Length - 4)).Trim(); 

हैप्पी कोडिंग!

+1

यदि आप कोड को अतिरिक्त सुरक्षित बनाना चाहते हैं। सबस्ट्रिंग प्राप्त करने की कोशिश करने से पहले लंबाई की जांच करने का प्रयास करें। –

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