これは公式のSwift4ドキュメントのサンプルコードを使用しています
_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番目のWordのみを取得(部分文字列)にしたいですか?ですから、「そこ」という言葉だけが欲しいのです。
「world!」を使ってみましたlet endOfSentence = greeting.index(of: "world!")!
のような引数として、Swift 4 Playgroundはそれが好きではありません。'Character 'が必要で、私の引数は文字列です。
それでは、どうすれば非常に正確な部分範囲の部分文字列を取得できますか?または、将来の使用に向けて文のn番目のWordを取得しますか?
range(of:)
を使用してサブストリングを検索できます。
import Foundation
let greeting = "Hello there world!"
if let endIndex = greeting.range(of: "world!")?.lowerBound {
print(greeting[..<endIndex])
}
出力:
Hello there
編集:
単語を区別したい場合は、手っ取り早い方法と良い方法があります。手っ取り早い方法:
import Foundation
let greeting = "Hello there world!"
let words = greeting.split(separator: " ")
print(words[1])
そして、これは徹底的な方法です。どのように分離されても、文字列内のすべての単語を列挙します。
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])
編集2:そして、7番目から11番目のキャラクターを取得しようとしている場合、これを行うことができます:
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])
Swift4の場合、
let string = "substring test"
let start = String.Index(encodedOffset: 0)
let end = String.Index(encodedOffset: 10)
let substring = String(string[start..<end])
最初の答えには間違いが1つあります。
Range<String.Index>.upperBound
UpperBoundプロパティはendIndexである必要があります例:
let text = "From Here Hello World"
if let result = text.range(of: "Hello World") {
let startIndex = result.upperBound
let endIndex = result.lowerBound
print(String(text[startIndex..<endIndex])) //"Hello World"
}
古い習慣は激しく死にます。 「Java」の方法で行い、文字列をスペースで分割し、2番目のWordにアクセスしました。
print(greeting.split(separator: " ")[1]) // "there /n"
In Swift 5 encodedOffset(Swift 4 func)は非推奨です。
tf160Offset を使用する必要があります
// Swift 5
let string = "Hi there! It's Nice to meet you!"
let startIndex = 10 // random for this example
let endIndex = string.count
let start = String.Index(utf16Offset: startIndex, in: string)
let end = String.Index(utf16Offset: endIndex, in: string)
let substring = String(string[start..<end])
プリント->はじめまして!