2012-01-16 17 views
28

क्या कोई ऐसा फ़ंक्शन है जो मैं एक स्ट्रिंग पर लागू कर सकता हूं जो किसी स्ट्रिंग में वर्ण होने पर गलत के पीछे वापस आ जाएगा।मैं कैसे जांच सकता हूं कि स्ट्रिंग में सी # में कोई वर्ण है या नहीं?

var abc = "s"; 
var def = "aB"; 
var ghi = "Sj"; 

मैं उदाहरण के लिए करना चाहते हैं क्या है एक समारोह है कि सही या गलत वापसी होगी अगर ऊपर एक कम या अपर केस निहित है:

मैं इस तरह के रूप में एक या अधिक चरित्र विकल्पों के साथ तार है "एस"।

if (def.Somefunction("s") == true) { } 

इसके अलावा सी # में मैं अगर कुछ इस तरह से सच है जांच करने की आवश्यकता है या मैं सिर्फ "== सच" को दूर कर सकता है क्या ज़रूरत है? यदि एक बूलियन अभिव्यक्ति सत्य है की जाँच करने के

if (abc.ToLower().Contains('s')) { } 

और नहीं, है, तो आप == true

Contains के बाद की जरूरत नहीं है:

उत्तर

67

आप नाम स्थान System.Linq से विस्तार विधि .Contains() उपयोग कर सकते हैं विधि एक विस्तार विधि है, मेरा समाधान कुछ लोगों के लिए भ्रमित प्रतीत होता है। यहाँ using System.Linq; जोड़ने के लिए दो संस्करणों है कि आप की आवश्यकता नहीं है कर रहे हैं:

if (abc.ToLower().IndexOf('s') != -1) { } 

// or: 

if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { } 

अद्यतन

आप आसान पुनः उपयोग के लिए अपने स्वयं के एक्सटेंशन विधि लिख सकते हैं करना चाहते हैं:

public static class MyStringExtensions 
{ 
    public static bool ContainsAnyCaseInvariant(this string haystack, char needle) 
    { 
     return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1; 
    } 

    public static bool ContainsAnyCase(this string haystack, char needle) 
    { 
     return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1; 
    } 
} 

फिर आप इसे इस तरह से कॉल कर सकते हैं:

if (def.ContainsAnyCaseInvariant('s')) { } 
// or 
if (def.ContainsAnyCase('s')) { } 

ज्यादातर मामलों में उपयोगकर्ता डेटा से निपटने पर, आप वास्तव में CurrentCultureIgnoreCase(या ContainsAnyCase एक्सटेंशन विधि) का उपयोग करना चाहते हैं, क्योंकि इस तरह से आप सिस्टम को ऊपरी/लोअरकेस समस्याओं को संभालने देते हैं, जो भाषा पर निर्भर करता है। कम्प्यूटेशनल मुद्दों से निपटने पर, जैसे कि एचटीएमएल टैग के नाम और इसी तरह, आप इनवेरिएंट संस्कृति का उपयोग करना चाहते हैं।

उदाहरण के लिए: तुर्की में, छोटे अक्षरों में अपरकेस अक्षर Iı(एक बिंदु के बिना), और नहीं i(एक बिंदु के साथ) है।

+9

हम्म, मैं String.Contains की एक अधिभार है कि एक चार तर्क लेता नहीं मिल रहा है। –

+11

@ScottSmith यह एक सिस्टम विधि [System.Linq] (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx) में परिभाषित एक विस्तार विधि है। आपको 'System.Linq;' – pauloya

+2

का उपयोग करके 'जोड़ने की आवश्यकता है। मैं' str.IndexOf ('s')> = 0' का उपयोग करना पसंद करता हूं लेकिन यह शायद एक स्टाइलिस्ट अंतर है। समझ के लिए पढ़ते समय यह मेरे लिए अधिक समझ में आता है। – CSS

2
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0; 
2

निम्नलिखित काम करना चाहिए:

var abc = "sAb"; 
bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1; 
2

समारोह String.Contains उपयोग();

एक उदाहरण कॉल,

abs.Contains("s"); // to look for lower case s 

here MSDN से अधिक है।के बाद से एक अगर बयान केवल एक अभिव्यक्ति है कि एक bool का मूल्यांकन उम्मीद

if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ... 

इसके अलावा, आप == true की जरूरत नहीं होगी,:

+1

यह ओपीएस प्रश्न का उत्तर नहीं देता है - वे जानना चाहते थे कि ऊपरी या लोअरकेस मौजूद था या नहीं - आपका समाधान केवल तभी सही होगा जब लोअरकेस "स्ट्रिंग में था। –

8

आप IndexOf विधि है, जो स्ट्रिंग तुलना प्रकार के लिए एक उपयुक्त अधिभार है उपयोग कर सकते हैं ।

3

स्ट्रिंग्स और बूलियन के साथ काम करने के तरीके के बिना सी # में काम करना मुश्किल होगा। लेकिन वैसे भी:

 String str = "ABC"; 
     if (str.Contains('A')) 
     { 
      //... 
     } 

     if (str.Contains("AB")) 
     { 
      //... 
     } 
+3

एमएसडीएन एक ऐसी विधि सूचीबद्ध नहीं करता है जो आपके पहले उदाहरण में एक चरित्र स्वीकार करता है। उस वाक्यविन्यास को प्राप्त करने के लिए आपको LINQ का उपयोग करना होगा या अपना स्वयं का एक्सटेंशन एक्सटेंशन लिखना होगा। –

0

यहाँ एक उदाहरण क्या का सबसे किया है

using System; 

class Program 
{ 
    static void Main() 
    { 
     Test("Dot Net Perls"); 
     Test("dot net perls"); 
    } 

    static void Test(string input) 
    { 
     Console.Write("--- "); 
     Console.Write(input); 
     Console.WriteLine(" ---"); 
     // 
     // See if the string contains 'Net' 
     // 
     bool contains = input.Contains("Net"); 
     // 
     // Write the result 
     // 
     Console.Write("Contains 'Net': "); 
     Console.WriteLine(contains); 
     // 
     // See if the string contains 'perls' lowercase 
     // 
     if (input.Contains("perls")) 
     { 
      Console.WriteLine("Contains 'perls'"); 
     } 
     // 
     // See if the string contains 'Dot' 
     // 
     if (!input.Contains("Dot")) 
     { 
      Console.WriteLine("Doesn't Contain 'Dot'"); 
     } 
    } 
} 
2

यदि आप इस एक बहुत उपयोग करने की योजना अपनी खुद की विस्तार विधि बना सकते हैं।

public static class StringExt 
{ 
    public static bool ContainsInvariant(this string sourceString, string filter) 
    { 
     return sourceString.ToLowerInvariant().Contains(filter); 
    } 
} 

उदाहरण उपयोग:

public class test 
{ 
    public bool Foo() 
    { 
     const string def = "aB"; 
     return def.ContainsInvariant("s"); 
    } 
} 
संबंधित मुद्दे

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