मैं निम्नलिखित ऑपरेटरों में से किसी से string.Endswith("")
में जांच करने की आवश्यकता: +,-,*,/
एकाधिक अंतराल के परीक्षण के लिए string.Endswith का उपयोग कैसे करें?
अगर मैं 20 ऑपरेटरों मैं ||
ऑपरेटर का उपयोग करने के लिए 19 बार नहीं करना चाहती है।
मैं निम्नलिखित ऑपरेटरों में से किसी से string.Endswith("")
में जांच करने की आवश्यकता: +,-,*,/
एकाधिक अंतराल के परीक्षण के लिए string.Endswith का उपयोग कैसे करें?
अगर मैं 20 ऑपरेटरों मैं ||
ऑपरेटर का उपयोग करने के लिए 19 बार नहीं करना चाहती है।
आप .NET 3.5 का उपयोग कर रहे हैं तो इसके साथ काफी आसान है:
!(x || y) == !x && !y
आप एक ही परिणाम है चाहते हैं, हम सिर्फ पूरे अभिव्यक्ति दो बार नकारना करने की जरूरत है LINQ:
string test = "foo+";
string[] operators = { "+", "-", "*", "/" };
bool result = operators.Any(x => test.EndsWith(x));
LINQ हमेशा नौकरी के लिए सही हथौड़ा है :) – cjk
मुझे इस तरह की चीजों को प्रारंभ करते समय केवल एक सरणी का उपयोग करने के लिए स्पष्ट लगता है: var operators = new [] {"+", "-", "*", "/" }; '। या बस: बूल परिणाम = नया [] {"+", "-", "*", "/"}.Any(x => test.EndsWith (x));' – Svish
@ स्विस: सरणी में बदल गया। :) –
एक regex अभिव्यक्ति एक विकल्प नहीं
है हालांकि इस तरह एक साधारण उदाहरण शायद काफी अच्छा ||
उपयोग कर रहा है, तो आपको उसके लिए regex का उपयोग कर सकते हैं:
if (Regex.IsMatch(mystring, @"[-+*/]$")) {
...
}
मैं व्यक्तिगत रूप से RegEx की सिफारिश करने में संकोच करता हूं। प्रस्तुत की गई समस्या के लिए यह सबसे धीमी संभव समाधान के साथ-साथ सबसे जटिल होने के बारे में है। – Stewart
@ स्टीवर्ट: मैं किसी भी कार्य के लिए रेगेक्स की सिफारिश करने में संकोच नहीं करता, लेकिन मुझे यह मानना है कि यह यहां सबसे आसान तरीका नहीं है। रेगेक्स के साथ एक त्रुटि शुरू करना आसान है, उदाहरण के लिए यदि ओपी अधिक अक्षरों को सम्मिलित करता है तो उन्हें सूची के अंत में उन्हें दर्ज करने के लिए सावधान रहना चाहिए। यदि वे शुरुआत में जोड़े गए हैं तो हाइफ़न एक श्रेणी बन जाएगा जो त्रुटि खोजने में मुश्किल हो सकती है यदि आप सिंटैक्स को रीगेक्स करने के लिए उपयोग नहीं करते हैं। –
आप जानते हैं, ज्यादातर लोग एक स्ट्रिंग समस्या उत्पन्न होने पर हर बार regexes पर कूदते हैं, लेकिन यह एक ऐसी स्थिति है जहां मुझे लगता है कि वास्तव में एक regex * साफ, संक्षिप्त, समझने में आसान है, और बनाए रखने में आसान ....... अगर आप regexes पता है। – mpen
तुम सच में करना चाहते हैं, तो आप अपने कोड में x || y
को प्रतिस्थापित करने के लिए डी मॉर्गन के कानूनों का उपयोग कर सकते हैं। एक संस्करण का कहना है:
x || y == !!(x || y) == !(!x && !y)
पूरी तरह से सही और काम कर रहा है, लेकिन मैं पढ़ना नहीं चाहूंगा कि 6 महीने में एक बग की तलाश में। – Stewart
इस प्रश्न के लिए कोई प्रासंगिकता नहीं है। –
टेस्ट स्ट्रिंग String.IndexOfAny(Char[], Int32)
विधि का उपयोग कर के अंतिम चार (यह मानते हुए str
अपने चर रहा है):
str.IndexOfAny(new char[] {'+', '-', '*', '/'}, str.Length - 1)
पूरा अभिव्यक्ति:
str.Lenght > 0 ? str.IndexOfAny(new char[] {'+', '-', '*', '/'}, str.Length - 1) != -1 : false
अच्छा, लेकिन यह मानता है कि सभी ऑपरेटर में केवल एक वर्ण होता है। –
हाँ, यह एक समस्या है। स्ट्रिंग की लंबाई का परीक्षण करने की आवश्यकता है> = 1. –
, संदर्भ का पूर्ण अभाव को देखते हुए होगा इस समाधान एक आसान ||
ऑपरेटर काम का हो का उपयोग कर से भी बदतर है कि:
Boolean check = false;
if (myString.EndsWith("+"))
check = true;
if (!check && myString.EndsWith("-"))
check = true;
if (!check && myString.EndsWith("/"))
check = true;
etc.
string s = "Hello World +";
string endChars = "+-*/";
का उपयोग करना एक समारोह:
private bool EndsWithAny(string s, params char[] chars)
{
foreach (char c in chars)
{
if (s.EndsWith(c.ToString()))
return true;
}
return false;
}
bool endsWithAny = EndsWithAny(s, endChars.ToCharArray()); //use an array
bool endsWithAny = EndsWithAny(s, '*', '/', '+', '-'); //or this syntax
,210
LINQ का उपयोग करना:
bool endsWithAny = endChars.Contains(s.Last());
TrimEnd का उपयोग करना:
bool endsWithAny = s.TrimEnd(endChars.ToCharArray()).Length < s.Length;
// als possible s.TrimEnd(endChars.ToCharArray()) != s;
के बारे में कैसे: -
string input = .....;
string[] matches = { ...... whatever ...... };
foreach (string match in matches)
{
if (input.EndsWith(match))
return true;
}
मैं जानता हूँ कि यह dreadfully इस संदर्भ में LINQ से बचने के लिए पुराने स्कूल है, लेकिन एक है दिन आपको इस कोड को पढ़ने की आवश्यकता होगी। मुझे पूरा यकीन है कि LINQ के उपयोग हैं (शायद मैं उन्हें एक दिन पाउंगा) लेकिन मुझे पूरा यकीन है कि यह ऊपर कोड की चार पंक्तियों को प्रतिस्थापित करने के लिए नहीं है।
येसिर। मैं regexes, या यह जवाब कहूंगा। – mpen
आपको रेगेक्स पसंद नहीं है, आपको LINQ पसंद नहीं है ... उनके साथ किसी भी समस्या के कारण नहीं, लेकिन क्योंकि आप उन्हें पढ़ नहीं सकते हैं। यह पूरी तरह से आपकी समस्या है। –
का उपयोग String.IndexOf(String)
:
str.Lenght > 0 ? "+-*/".IndexOf(str[str.Lenght - 1]) != -1 : false
क्यों नहीं आप उपयोग करना चाहते || ऑपरेटर? यह वही है जो इसके लिए है। यदि उन समाधानों के बारे में सोच सकते हैं जो एंड्सविथ का उपयोग नहीं करते हैं, लेकिन वे अभी भी || का उपयोग करते हैं ऑपरेटर – Stewart
हास्यास्पद प्रतिबंध = होमवर्क –
@ स्टुअर्ट: अगर मेरे पास जांच करने के लिए 20 तार हैं, तो मुझे इसका उपयोग करना होगा || ऑपरेटर 1 9 बार। – neven