Ceci utilise l'exemple de code du document officiel Swift4
let greeting = "Hi there! It's Nice to meet you! ????"
let endOfSentence = greeting.index(of: "!")!
let firstSentence = greeting[...endOfSentence]
// firstSentence == "Hi there!"
Mais disons let greeting = "Hello there world!"
et je veux ne récupérer que le deuxième mot (sous-chaîne) dans cette phrase? Donc, je ne veux que la Parole "là-bas".
J'ai essayé d'utiliser "world!" comme un argument comme let endOfSentence = greeting.index(of: "world!")!
mais Swift 4 Playground n'aime pas ça. Il attend 'Character' et mon argument est une chaîne.
Alors, comment puis-je obtenir une sous-chaîne d'une sous-gamme très précise? Ou trouver nth Word dans une phrase pour une plus grande utilisation dans le futur?
Vous pouvez rechercher des sous-chaînes à l'aide de range(of:)
.
import Foundation
let greeting = "Hello there world!"
if let endIndex = greeting.range(of: "world!")?.lowerBound {
print(greeting[..<endIndex])
}
les sorties:
Hello there
MODIFIER:
Si vous voulez séparer les mots, il y a un moyen rapide et sale et un bon moyen. La façon rapide et sale:
import Foundation
let greeting = "Hello there world!"
let words = greeting.split(separator: " ")
print(words[1])
Et voici la méthode détaillée, qui énumérera tous les mots de la chaîne, peu importe la façon dont ils sont séparés:
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: Et si vous essayez simplement d’obtenir les caractères 7 à 11, vous pouvez le faire:
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])
Pour Swift4,
let string = "substring test"
let start = String.Index(encodedOffset: 0)
let end = String.Index(encodedOffset: 10)
let substring = String(string[start..<end])
Il y a une erreur dans la première réponse.
Range<String.Index>.upperBound
La propriété upperBound doit être endIndex Par exemple:
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"
}
Les vieilles habitudes ont la vie dure. Je l'ai fait à la manière "Java" et divisé la chaîne par des espaces, puis accédé au deuxième mot.
print(greeting.split(separator: " ")[1]) // "there /n"