2016-11-16 2 views
-1

Ich möchte in der Lage zu erkennen, ob eine Zeichenfolge eine Zahl enthält, entweder als eine Ziffer (0-9) geschrieben oder als Buchstaben in einfachem Englisch (eins, zwei, drei ..). Die Buchstabenfolgen in der Zeichenfolge sollten als einzelne Wörter und nicht als Teile von Wörtern erkannt werden.Wie erkenne ich, ob eine Zeichenfolge entweder eine Ziffer als Ziffer enthält oder als Buchstaben in C# geschrieben wird?

So zum Beispiel:

"This string contains no numbers" = false; 
"This string contains the number 1" = true; 
"This string contains the number three" = true; 
"This string contains a dogs bone" = false; //contains the word 'one' as part of the word 'bone', therefore returns false 

nichts auf, so dass speziell diese Frage finden Könnten Antworten; Sie haben hauptsächlich damit zu tun, nur ganze Zahlen aus Strings zu extrahieren, also dachte ich, ich würde weitermachen und fragen.

Gibt es eine Bibliothek, die solche Sachen verarbeiten kann? Wenn nicht, wie kann ich das angehen? Gibt es einen schnelleren Weg, als alle formulierten Zahlen zu einem Array zusammenzufassen?

+2

Ich habe nicht nach unten Sie stimmen , aber nach dem "Wie stelle ich eine gute Frage?" http://stackoverflow.com/help/how-to-ask Artikel, Sie haben nicht gezeigt, was Sie bereits recherchiert und/oder versucht haben. – AndyJ

Antwort

4

Wenn Sie einfach mit einer eingebauten Bibliothek, dann bin ich mir nicht bewusst, einer, werde ich sein gerne korrigiert, wenn jemand es besser weiß.

Edit: mit OPs Klärung aktualisiert und AndyJ ‚s Empfehlung

das diese Methode auf einzelne Wörter tun Sie können stattdessen verwenden:

public bool ContainsNumber(string s) 
{ 
    // This is the 'filter' of things you want to check for 
    // The '...' is for brevity, obviously it should have the other numbers here 
    var numbers = new List<string>() { "1", "2", "3", ... , "one", "two", "three" }; 

    // Split the provided string into words 
    var words = s.Split(' ').ToList(); 

    // Checks if the list of words matches ANY of the provided numbers 
    // Case and culture insensitive for better matching 
    return words.Any(w => numbers.Any(n => n.Equals(w, StringComparison.OrdinalIgnoreCase))); 
} 

Verbrauch:

ContainsNumber ("Keine Zahlen hier");
ContainsNumber ("Die Nummer drei");
ContainsNumber ("Der Hund aß einen Knochen");

Ausgang:

falsch
wahr
falsch

Edit 2: Zur Rückkehr passenden Worte

public List<string> GetMatches(string s) 
{ 
    var numbers = new List<string>() { "1", "2", "3", ... , "one", "two", "three" }; 
    var words = s.Split(' ').ToList(); 

    return words.Intersect(numbers, StringComparer.OrdinalIgnoreCase).ToList(); 
} 

uns Alter:

GetMatches ("das hat keine Nummern");
GetMatches ("das hat eine Nummer");
GetMatches ("diese 1 hat einen Knochen");
GetMatches ("1 zwei 3 und dann einige mehr");

Ausgang:

null
"one"
"1"
"1", "zwei", "3"

+0

Nun, ja, es würde für den Satz wahr, aber es ist korrekt. Die Zeichenfolge ** enthält ** eine Zahl. – Poody

+1

Es ist unklar, was OP wollte, also dachte ich würde diesen speziellen Randfall erwähnen. – Equalsk

+0

@Poody ... Gesprochen wie ein echter Programmierer;) obwohl ich vermute, das OP bedeutet "wie einzelne Worte". – AndyJ

0

Erstellen Sie ein Array mit allem, was Sie in dieser Zeichenfolge suchen und iterieren möchten.

es ist die schnellste Lösung, wenn Sie nur über einzelne Ziffern kümmern. Wenn Sie es mit allen Arten von Zahlen tun wollen, wird es noch mehr Arbeit erfordern .....

+0

Nicht wirklich eine einfache Art, es zu tun .. – Poody

+1

es ist etwa 4-5 Zeilen Code. es ist eher für Hausaufgaben gedacht, nicht für die Entwicklung des wirklichen Lebens. Sie können ein Array für die Strings erstellen und eine for-Schleife für die Zahlen ausführen ... aber es ist die gleiche Idee. – Dani

+0

@Equalsk nur diese Idee umsetzen. 5 Zeilen :-) – Dani

Verwandte Themen