2016-06-09 113 views
4

我想生成一個給定字符串的單詞列表,其中每個列出的單詞至少包含一個大寫字母。如何在swift中創建包含大寫字母的單詞列表?

有這樣一個字符串:

let str: String = "Apple watchOS 3 USA release date and feature rumours." 

我想獲得一個這樣的數組:

var list: [String] = ["Apple", "watchOS", "USA"] 

什麼是做到這一點的最好方法是什麼?

+3

你不需要聲明類型字符串]') - 斯威夫特會推斷他們 –

+0

謝謝亞倫 – Cue

回答

11
var list = str.componentsSeparatedByString(" ").filter{ $0.lowercaseString != $0 } 
+0

測試你的字符串在操場給你你想在一行:) – NSGangster

+1

我會刪除'()'圍繞'過濾器'關閉 –

+0

什麼是好處/做這個的區別?只是注意到它仍然以這種方式編譯,我一直將它們包含在我的'.filter' /'.map'語句中。我想用相同的代碼少字符? – NSGangster

0

你也許可以做這樣的事情。我沒有測試過,只是寫得很快。

let str = "Apple watchOS 3 USA release date and feature rumours." 
let strArr = str.componentsSeparatedByString(" ") 
var upperWords: Array<String> = [] 
for word in strArr { 
    if word != word.lowercaseString { 
     upperWords.append(word) 
    } 
} 
+1

這包含多個錯誤,並不能編譯 –

+0

抱歉修好了。就像我說過的,我只是在Xcode之外很快寫出來的。我道歉。 – AtheistP3ace

+1

你的代碼工作得很好,只有一些人人都可以修復的錯誤。恨那些downvoters。請在測試人們善意和幫助之前進行測試並嘗試。想象一下,如果沒有人能夠回答。 –

3

您可以在Swift中使用內置的函數來獲取字符串的所有單詞。你不需要聲明類型(`:String`和`:[']),因爲你可以讓一些單詞帶點(如下面的例子)

let str = "Apple watchOS 3 USA release date and feature Rumours." 
var list = [String]() 
str.enumerateSubstringsInRange(str.startIndex..<str.endIndex, options:.ByWords) { 
    (substring, substringRange, enclosingRange, value) in 
    //add to your array if lowercase != string original 
    if let _subString = substring where _subString.lowercaseString != _subString { 
     list.append(_subString) 
    } 
} 
+1

這應該是可以接受的答案,因爲'componentsSeparatedByString'是一種過於簡單的方法來查找字符串中的單詞。 – Rob

相關問題