2017-03-15 5 views
5

Bearbeiten: Es gibt bereits eine ähnliche Frage, aber es ist für Zahlen durch ein bestimmtes Zeichen getrennt (Get no. Of words in swift for average calculator). Stattdessen ist diese Frage im Begriff, die Zahl der realen Wörter in einem Text zu erhalten, der auf verschiedene Arten getrennt ist: ein Zeilenumbruch, einige Zeilenumbrüche, ein Leerzeichen, mehr als ein Leerzeichen usw.So erhalten Sie die Anzahl der echten Wörter in einem Text in Swift

Ich möchte die Nummer von bekommen Wörter in einer Zeichenfolge mit Swift 3.

Ich benutze diesen Code, aber ich bekomme ungenau Ergebnis, weil die Zahl wird die Leerzeichen und neue Zeilen statt der effektiven Anzahl der Wörter zählen.

let str = "Architects and city planners,are \ndesigning buildings to create a better quality of life in our urban areas." 
// 18 words, 21 spaces, 2 lines 

let components = str.components(separatedBy: .whitespacesAndNewlines) 

let a = components.count 

print(a) 
// 23 instead of 18 
+0

@LeoDabus Ich habe die Frage, die Sie verlinkt haben oder Ihre Antwort vor der Beantwortung dieser Frage nicht gesehen, aber Ihre Antwort scheint sowohl eine perfekte Passform als auch eine richtige Antwort auf diese * Frage zu sein. Obwohl die Antworten mehr oder weniger identisch sind, sind sowohl der Titel als auch der Fragetext so unähnlich. Ich denke, dass es schwierig sein würde, die Frage zu finden, die Sie mit Suchbegriffen aus dieser Frage verknüpft haben. Als solche denke ich, es ist eine Strecke, um die Frage ein Duplikat zu nennen. – par

+0

@LeoDabus Ich erklärte, wie diese Frage anders ist – Cue

Antwort

9

aufeinander folgende Leerzeichen und Zeilenumbrüche werden nicht in einem generischen Leerzeichen Region verschmolzen, so dass Sie einfach ein paar leere „Worte“ zwischen aufeinanderfolgenden Leerzeichen bekommen. Befreien Sie sich von dieser durch leere Strings Ausfiltern:

let components = str.components(separatedBy: .whitespacesAndNewlines) 
let words = components.filter { !$0.isEmpty } 

print(words.count) // 17 

Die oben wird 17 drucken, weil Sie nicht , als Trennzeichen enthalten sind, so dass die Zeichenfolge "planners,are" als ein Wort behandelt wird.

Sie können diese Zeichenfolge brechen auch nach oben durch, wie so mit dem Satz von Separatoren Interpunktionszeichen hinzufügen:

let chararacterSet = CharacterSet.whitespacesAndNewlines.union(.punctuationCharacters) 
let components = str.components(separatedBy: chararacterSet) 
let words = components.filter { !$0.isEmpty } 

print(words.count) // 18 

Jetzt werden Sie eine Anzahl von 18 sehen, wie Sie es erwarten.

Verwandte Themen