2017-09-26 3 views
0

これは公式Swift4ドキュメントSwift 4で特定の範囲の部分文字列を取得する方法は?

let greeting = "Hi there! It's nice to meet you! " 
let endOfSentence = greeting.index(of: "!")! 
let firstSentence = greeting[...endOfSentence] 
// firstSentence == "Hi there!" 

からのサンプルコードを使用している。しかしlet greeting = "Hello there world!" を言うと、私がしたいことができますが、この文にのみ2番目の単語(ストリング)を取得?だから私はただそこに「そこに」という言葉しか望んでいない。

「world!」を使用しようとしました。 let endOfSentence = greeting.index(of: "world!")!のような議論ではありますが、Swift 4 Playgroundではそれが好きではありません。それは 'Character'を期待していて、私の議論は文字列です。

どのようにして非常に正確な部分範囲の部分文字列を取得できますか?または、将来、より大きな使用のために文でn番目の単語を取得しますか?

答えて

3

range(of:)を使用すると、部分文字列を検索できます。

import Foundation 

let greeting = "Hello there world!" 

if let endIndex = greeting.range(of: "world!")?.lowerBound { 
    print(greeting[..<endIndex]) 
} 

出力:

Hello there 

EDIT:

あなたは言葉を分離したい場合は、間に合わせとウェイと良い方法があります。迅速かつ汚い方法:

import Foundation 

let greeting = "Hello there world!" 

var words: [String] = [] 

greeting.enumerateSubstrings(in: greeting.startIndex..<greeting.endIndex, options: .byWords) { substring, _, _, _ in 
    if let substring = substring { 
     words.append(substring) 
    } 
} 

print(words[1]) 

EDIT 2:そして、もし

import Foundation 

let greeting = "Hello there world!" 

let words = greeting.split(separator: " ") 

print(words[1]) 

そして、ここでは関係なく、それらが分離しているか、文字列内のすべての単語を列挙しません徹底的な方法、ですあなたは11番目の文字から7番目の文字を取得しようとしているだけです。これを行うことができます:

import Foundation 

let greeting = "Hello there world!" 

let startIndex = greeting.index(greeting.startIndex, offsetBy: 6) 
let endIndex = greeting.index(startIndex, offsetBy: 5) 

print(greeting[startIndex..<endIndex]) 
+0

申し訳ありませんああ、私はより明確にされている必要があります。私は正確に「そこに」という言葉が欲しい。 Javaのバックグラウンドから、文字列を文字列配列に押し込み、7から11までのインデックスから印刷します。Swift4には、部分文字列メンバを使用する方法が組み込まれていませんか? –

+0

@KentWサイズについてはこれを試してみてください。 –

+0

ありがとう!私は財団を輸入したくなかった。徹底的な答え。私はSwift 4 iBookでこれを見つけることができませんでした。 –

0

古い習慣は枯渇します。私はそれを "Java"のやり方で行い、文字列をスペースで分割し、次に2番目の単語にアクセスしました。 swift4については

print(greeting.split(separator: " ")[1]) // "there /n" 
+0

それは私の答えの編集版で書いたことの一つであることに気がつきましたか? –

1

let string = "substring test" 
let start = String.Index(encodedOffset: 0) 
let end = String.Index(encodedOffset: 10) 
let substring = String(string[start..<end]) 
関連する問題