2016-05-31 33 views
7

Swiftで最後の単語を抽出する方法は何ですか?だから私が "Lorem ipsum dolor sit amet"を持っていれば、 "amet"を返してください。これを行う最も効率的な方法は何ですか? .lastSwiftで最後の単語を文字列に抽出

var string = "Lorem ipsum dolor sit amet" 
var stringArr = string.componentsSeparatedByString(" ") 

var lastWord = stringArr.last //amet 

答えて

10

あなたは文字列のメソッドenumerateSubstringsInRangeを使用することができます。最初のパラメータは文字列characters.indicesとオプション.ByWordsを渡すだけです。各部分文字列を最後の配列に追加して返します。

のXcode 8.1•スウィフト3.0.1以降

extension String { 
    var byWords: [String] { 
     var byWords:[String] = [] 
     enumerateSubstrings(in: startIndex..<endIndex, options: .byWords) { 
      guard let word = $0 else { return } 
      print($1,$2,$3) 
      byWords.append(word) 
     } 
     return byWords 
    } 
    func firstWords(_ max: Int) -> [String] { 
     return Array(byWords.prefix(max)) 
    } 
    var firstWord: String { 
     return byWords.first ?? "" 
    } 
    func lastWords(_ max: Int) -> [String] { 
     return Array(byWords.suffix(max)) 
    } 
    var lastWord: String { 
     return byWords.last ?? "" 
    } 
} 

使用法:

let sentence = "Out of this world!!!" 
let firstWord = sentence.firstWord  // "Out" 
let lastWord = sentence.lastWord   // world" 
let words = sentence.byWords    // ["Out", "of", "this", "world"] 
let first2Words = sentence.firstWords(2) // ["Out", "of"] 
let last2Words = sentence.lastWords(2) // ["this", "world"] 

スウィフト2

extension String { 
    var byWords: [String] { 
     var result:[String] = [] 
     enumerateSubstringsInRange(characters.indices, options: .ByWords) { 
      guard let substring = $0.substring else { return } 
      result.append(substring) 
     } 
     return result 
    } 
} 
+1

大変感謝しています!答えは受け入れられるべきだと思います。 – senty

3

まず使用componentsSeparatedByString私もcomponentsSeparatedByCharactersInSetを使用し、空白文字セットを使用することを検討します:

let string = "Lorem ipsum dolor sit amet" 
let stringArray = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
print(stringArray.last) 
4

を使用して、配列の最後の単語を取得し、その後、スペースで配列に、あなたの文字列を分割する

+0

私はあなたのアプローチが好きです!どうもありがとう!このアプローチで最後の2つの単語を取得することは可能ですか、forループを使用する必要がありますか? – senty

+0

答えに 'import foundation'を追加するのを忘れないでください。この例はそれがなければ動作しません。 – ColGraff

+0

'import foundation'なしで私のために働く:/ – senty

7

その他の回答は、Foundationクラスを含める場合は問題ありません。あなたはスウィフト・クラスのみを使用したい場合、あなたはそれをこの方法を行うことができます。

スウィフト3:

let str = "Lorem ipsum dolor sit amet" 
let split = str.characters.split(separator: " ") 
let last = String(split.suffix(1).joined(separator: [" "])) 
let lastTwo = String(split.suffix(2).joined(separator: [" "])) 

print(last) // -> "amet" 
print(lastTwo) // -> "sit amet” 

スウィフト2:

let str = "Lorem ipsum dolor sit amet" 
let split = str.characters.split(Character(" ")) 
let last = String(split.suffix(1).joinWithSeparator([" "])) 
let lastTwo = String(split.suffix(2).joinWithSeparator([" "])) 

print(last) // -> "amet" 
print(lastTwo) // -> "sit amet" 
関連する問題