2013-04-16 7 views
11

क्या स्ट्रिंग में 2 शब्द या अधिक होने पर क्या फ़ंक्शन ढूंढना संभव है?स्ट्रिंग में एक और दो तार

string d = "You hit someone for 50 damage"; 
string a = "damage"; 
string b = "someone"; 
string c = "you"; 

if(d.Contains(b + a)) 
{ 
    Console.WriteLine(" " + d); 
    Console.ReadLine(); 
} 

जब मैं इस चलाने के लिए, कंसोल विंडो बस नीचे वास्तव में तेजी से कुछ भी बिना दिखाए बन्द हो जाता है: यह मैं क्या करने की कोशिश कर रहा हूँ है।

और एक और सवाल: यदि मैं एक जोड़ना चाहता हूं कि कितना नुकसान हुआ है, तो उस नंबर को पाने का सबसे आसान तरीका क्या होगा और इसे TryParse में प्राप्त करें?

+4

'अगर (d.Contains (क) && d.Contains (ख))' –

+1

आप Console.ReadLine() करता है, तो पाश बाहर रखना चाहिए। –

+1

आप स्ट्रिंग्स 'बी' और' ए 'को जोड़ रहे हैं, इसलिए आप अनिवार्य रूप से' if (d.Contains ("someonedamage") लिख रहे हैं) 'जो काम नहीं करेगा। आपका if-statement विफल रहता है और इसलिए 'कंसोल' नहीं होगा। रीडलाइन() '। गंभीरता से, यह * बेहद * मूल डीबगिंग है, कृपया अपने कोड से कैसे कदम उठाना सीखें। – tnw

उत्तर

34

आप Contains पर दो बार कॉल करने या इसे संभालने के लिए अपनी स्वयं की विस्तार विधि बनाने से बेहतर होंगे।

string d = "You hit someone for 50 damage"; 
string a = "damage"; 
string b = "someone"; 
string c = "you"; 

if(d.Contains(a) && d.Contains(b)) 
{ 
    Console.WriteLine(" " + d); 
    Console.ReadLine(); 
} 

जहां तक ​​आपके दूसरे प्रश्न के रूप में, आप एक नियमित अभिव्यक्ति स्ट्रिंग 50 को खोजने के लिए या स्ट्रिंग हमेशा एक है अगर पार्स करने के लिए बना सकते हैं, बस इसे एक अंतरिक्ष के आधार पर बांट और 5 वीं हिस्सा मिलता है।

+1

आह क्यों मैंने इसके बारे में सोचा नहीं, धन्यवाद! :) – Winkz

+0

हम्म क्यों अगर प्रत्येक पंक्ति में 5 वें स्थान पर नंबर नहीं है? – Winkz

+0

यदि यह एक ही स्थान पर नहीं है, तो यह काम नहीं करेगा।आप इसके बजाय नियमित अभिव्यक्ति करना चाहेंगे। \ d * आपको एक स्ट्रिंग में सभी अंक मिलेंगे, जो उपरोक्त आपके उदाहरण के लिए काम करेंगे। –

1

इसका कारण यह है d करता नहीं शामिल b + a (अर्थात "someonedamage"), और इसलिए आवेदन सिर्फ समाप्त हो जाता है (के बाद से अपने Console.ReadLine();if ब्लॉक के भीतर है)।

6

है ऐसा इसलिए है क्योंकि बयान झूठा वापस लौट आता है के बाद से घ बी + एक यानी "someonedamage"

1

क्योंकि b + a ="someonedamage", इस लक्ष्य को हासिल करने की कोशिश शामिल नहीं है:

if (d.Contains(b) && d.Contains(a)) 
{ 
    Console.WriteLine(" " + d); 
    Console.ReadLine(); 
} 
1

आपका b + a बराबर "someonedamage" है, चूंकि आपके d में वह स्ट्रिंग नहीं है, इसलिए आपके if कथन false देता है और निम्न भागों को चलाता नहीं है।

Console.WriteLine(" " + d); 
Console.ReadLine(); 

आप इसे और अधिक कुशल नियंत्रित कर सकते हैं;

bool b = d.Contains(a) && d.Contains(b); 

यहां एक DEMO है।

1
string d = "You hit someone for 50 damage"; 
string a = "damage"; 
string b = "someone"; 
string c = "you"; 

if(d.Contains(a) && d.Contains(b)) 
{ 
    Console.WriteLine(" " + d); 
} 
Console.ReadLine(); 
1

कोड d.Contains(b + a) आप जाँच लें कि "आप 50 क्षति के लिए किसी हिट" के साथ "someonedamage" शामिल हैं। और यह (मुझे लगता है) आप नहीं चाहते हैं।

+ बी और दो की दो स्ट्रिंग को जोड़ता है।

आप द्वारा

if(d.Contains(b) && d.Contains(a)) 
1

तो आप को पता है कि अगर एक स्ट्रिंग दो अन्य तार शामिल चाहते हैं कि उसे जांच करने के लिए है?

आप इस एक्सटेंशन के जो भी तुलना निर्दिष्ट कर सकते हैं इस्तेमाल कर सकते हैं:

public static bool ContainsAll(this string text, StringComparison comparison = StringComparison.CurrentCulture, params string[]parts) 
{ 
    return parts.All(p => text.IndexOf(p, comparison) > -1); 
} 

इस तरह से इसका इस्तेमाल (आप भी छोड़ सकते हैं StringComparison):

bool containsAll = d.ContainsAll(StringComparison.OrdinalIgnoreCase, a, b); 
1

आप एक सूची है तो शब्दों का आप इस तरह की विधि कर सकते हैं:

public bool ContainWords(List<string> wordList, string text) 
{ 
    foreach(string currentWord in wordList) 
     if(!text.Contains(currentWord)) 
     return false; 
    return true; 
} 
1

आप एक एक्सटेंशन लिख सकते हैं linq के साथ विधि।

public static bool MyContains(this string str, params string[] p) { 
return !p.Cast<string>().Where(s => !str.Contains(s)).Any(); 
} 

संपादित करें (THX sirid के लिए):

public static bool MyContains(this string str, params string[] p) { 
return !p.Any(s => !str.Contains(s)); 
} 
+2

'कास्ट ()' अनावश्यक है। आप 'जहां()' और 'Any()' को भी जोड़ सकते हैं, क्योंकि 'Any()' फ़िल्टर तर्क ले सकता है। – siride

7
public static class StringExtensions 
{ 
    public static bool Contains(this string s, params string[] predicates) 
    { 
     return predicates.All(s.Contains); 
    } 
} 

string d = "You hit someone for 50 damage"; 
string a = "damage"; 
string b = "someone"; 
string c = "you"; 

if (d.Contains(a, b)) 
{ 
    Console.WriteLine("d contains a and b"); 
} 
+1

@AluanHaddad अच्छा बिंदु। मेरा जवाब अपडेट किया गया। – Romoku

3

आप स्ट्रिंग के लिए देख रहे शब्दों की एक निश्चित संख्या में शामिल है या विशिष्ट शब्द हैं? आपका उदाहरण उत्तरार्द्ध की ओर जाता है।

उस स्थिति में, आप तारों को पार्सिंग में देखना चाहते हैं या कम से कम रेगेक्स का उपयोग करना चाहते हैं।
रेगेक्स सीखें - यह प्रोग्रामिंग में 1000x से अधिक उपयोगी होगा। मैं इस पर ज़ोर देना नहीं कर सकता। इसमें शामिल हैं और यदि कथन बहुत जल्दी गड़बड़ हो जाएंगे।

तुम सिर्फ शब्दों गिनती करने की कोशिश कर रहे हैं तो:

string d = "You hit someone for 50 damage"; 
string[] words = d.Split(' '); // Break up the string into words 
Console.Write(words.Length); 
0

मैं सिर्फ स्ट्रिंग 2 या अधिक शब्द है, तो जाँच करने के लिए होता है में एक जगह के लिए जाँच की।

string d = "You hit someone for 50 damage"; 
string a = "damage"; 
string b = "someone"; 
string c = "you"; 

bool a = ?(d.contains(" ")):true:false; 

if(a) 
{ 
Console.WriteLine(" " + d); 
} 

Console.Read(); 
0
string d = "You hit ssomeones for 50 damage"; 
string a = "damage"; 
string b = "someone"; 

if (d.Contains(a) && d.Contains(b)) 
{ 
    Response.Write(" " + d); 

} 
else 
{ 
    Response.Write("The required string not contain in d"); 
} 
0

तो क्या है कि तुम सच के बाद हो रहा है? आप यह सुनिश्चित करें कि कुछ नुकसान के लिए प्रभावित किया है (इस मामले में) बनाना चाहते हैं, तुम क्यों string.Format

string a = string.Format("You hit someone for {d} damage", damage); 

का उपयोग नहीं इस तरह से कर रहे हैं, तो आप क्षति क्वालीफायर कि आप के लिए देख रहे हैं करने की क्षमता है और अन्य भागों के लिए इसकी गणना करने में सक्षम हैं।

0
class Program { 
      static void Main(String[] args) { 
      // By using extension methods 
      if ("Hello world".ContainsAll(StringComparison.CurrentCultureIgnoreCase, "Hello", "world")) 
       Console.WriteLine("Found everything by using an extension method!"); 
      else 
       Console.WriteLine("I didn't"); 

      // By using a single method 
      if (ContainsAll("Hello world", StringComparison.CurrentCultureIgnoreCase, "Hello", "world")) 
       Console.WriteLine("Found everything by using an ad hoc procedure!"); 
      else 
       Console.WriteLine("I didn't"); 

      } 

      private static Boolean ContainsAll(String str, StringComparison comparisonType, params String[] values) { 
      return values.All(s => s.Equals(s, comparisonType)); 
      }  
     } 

     // Extension method for your convinience 
     internal static class Extensiones { 
      public static Boolean ContainsAll(this String str, StringComparison comparisonType, params String[] values) { 
      return values.All(s => s.Equals(s, comparisonType)); 
      } 
     } 
0
public static bool In(this string str, params string[] p) 
    { 
     foreach (var s in p) 
     { 
      if (str.Contains(s)) return true; 
     } 
     return false; 
    } 
+0

किसी को आम तौर पर किसी के उत्तर में स्पष्टीकरण के कुछ शब्द जोड़ना चाहिए। – mkl

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