2016-03-28 36 views
6

Ich bin neu in C#. Ich würde gerne wissen, ob eine Zeichenfolge wie ein Benutzername ein bestimmtes Wort enthält. Ich will diese bestimmte Wörter aus einem array.Here die eine example.`Überprüfen Sie, ob eine Zeichenfolge eine bestimmte Zeichenfolge mit Array

Console.Write("Name: "); 
_name = Console.ReadLine(); 
name = Program.ProperNameMethod(_name); 
Console.WriteLine(); 

string[] badWordArray = { "aBadword1", "aBadWord2", "aBadWord3" }; 

if (!string.IsNullOrEmpty(name) // Would like to check for the badwordarray aswell) 

(Update)

Vielen Dank, aber ich lernen C# für etwa einen Monat nur bekommen konnte noch nicht Lambda oder regex decken. Ich werde mir diese Codes später ansehen.

+0

was ist 'ProperNameMethod' –

+0

@Reza Taibur bitte markieren Sie meine Antwort als akzeptiert, wenn es Ihnen hilft. –

+0

Ich habe eine Methode gemacht, die das erste Wort der Zeichenkette in einen Blockbuchstaben umwandeln würde. @ Un-lucky –

Antwort

2

Sie wollen wahrscheinlich Groß- und Kleinschreibung Validierung:

string[] badWordArray = { "aBadword1", "aBadWord2", "aBadWord3" }; 

Boolean isBadWord = badWordArray 
    .Any(badWord => name.IndexOf(badword, StringComparison.OrdinalIgnoreCase) >= 0); 

Oder wenn Sie auf aktuelle Kultur überprüfen

Boolean isBadWord = badWordArray 
    .Any(badWord => name.IndexOf(badWord, StringComparison.CurrentCultureIgnoreCase) >= 0); 

Paranoic Fall handelt es reguläre Ausdrücke wie folgt aus:

string[] badWordArray = { "aBadword1", "aBadWord2", "aBadWord3" }; 

    // Nasty user wants to be rude but pass typical filters... 
    String name = "A- Bad..WORD..1 !!!"; 

    String line = Regex.Replace(name, @"\W", ""); 

    Boolean isBadWord = badWordArray 
    .Any(badWord => line.IndexOf(badWord, StringComparison.OrdinalIgnoreCase) >= 0); 
+0

Ich mochte Ihre "Paranoic Case" Antwort Sir. Die Verwendung von contains ist jedoch effizienter als die Verwendung von Regex. –

+0

@Lost_In_Library: Es hängt davon ab, was Sie erreichen möchten. Im Falle von Effizienz (riesige Reihe von schlechten Worten) und lax Kontrolle haben Sie recht.Aber wenn Sie nur die Möglichkeit ausschließen wollen, unhöflich zu sein, ein Schatten eines schlechten Wortes, müssen Sie reguläre Ausdrücke und dergleichen verwenden. –

4

Verwenden Sie den folgenden Lambda-Ausdruck, um festzustellen, ob der Name die schlechten Wörter enthält.

bool nameHasBadWords = badWordArray.Any(p => name.Contains(p)); 
+0

Was ist das "p"? @ Mahesh Chand? –

+0

p ist ein Alias, der verwendet wird, um ein einzelnes Element des Arrays darzustellen. –

3

Hier ist, was ich tun konnte;

 // Lowered bad words array 
     string[] badWordArray = { "abadword1", "abadword2", "abadword3" }; 

     bool isBadWord = false; 
     if (!string.IsNullOrEmpty(name)) 
     { 
      name = name.ToLower(); 
      isBadWord = badWordArray.Any(badWord => name.Contains(badWord)); 
     } 

Ich testete auch andere Antworten;

459 ms:

.Any(badWord => string.Equals(name, badWord, StringComparison.CurrentCultureIgnoreCase)); 

1464 ms:

.Any(badWord => name.IndexOf(badWord, StringComparison.CurrentCultureIgnoreCase) >= 0); 

247 ms:

.Any(badWord => name.Contains(badWord)); 

Hier ist meine einfache (& dumm) Testcode:

 var name = "tuckyou"; 

     // Lowered bad words array 
     string[] badWordArray = { "abadword1", "abadword2", "abadword3" }; 

     Stopwatch stopwatch = new Stopwatch(); 

     int oneMillion = 1000000; 

     bool isBadWord = false; 

     stopwatch.Start(); 
     for (int i = 0; i < oneMillion; i++) 
     { 
      isBadWord = badWordArray.Any(badWord => string.Equals(name, badWord, StringComparison.CurrentCultureIgnoreCase)); 
     } 
     stopwatch.Stop(); 

     Console.WriteLine(stopwatch.ElapsedMilliseconds); 
     stopwatch.Reset(); 

     stopwatch.Start(); 
     for (int i = 0; i < oneMillion; i++) 
     { 
      isBadWord = badWordArray.Any(badWord => name.IndexOf(badWord, StringComparison.CurrentCultureIgnoreCase) >= 0); 
     } 
     stopwatch.Stop(); 

     Console.WriteLine(stopwatch.ElapsedMilliseconds); 
     stopwatch.Reset(); 

     stopwatch.Start(); 
     if (!string.IsNullOrEmpty(name)) 
     { 
      name = name.ToLower(); 
     } 

     for (int i = 0; i < oneMillion; i++) 
     { 
      isBadWord = badWordArray.Any(badWord => name.Contains(badWord)); 
     } 
     stopwatch.Stop(); 

     Console.WriteLine(stopwatch.ElapsedMilliseconds); 

     Console.ReadLine(); 

Ofcourse, Stoppuhr ist nicht korrekt. Aber es gibt eine Idee.

0

In Anbetracht Sie sagten, Sie sind ein Anfänger. Hier ist ein einfacher Weg. Ich weiß, dass diese Antworten besser sind, aber das sollte für Anfänger gut sein.

Verwandte Themen