Actualizado para Swift 4
Verificando con qué comienza y termina una cadena
Puede utilizar los métodos hasPrefix(_:)
y hasSuffix(_:)
para probar la igualdad con otra cadena.
let str = "Hello, playground"
if str.hasPrefix("Hello") { // true
print("Prefix exists")
}
if str.hasSuffix("ground") { // true
print("Suffix exists")
}
Obtener las subcadenas de prefijo y sufijo reales
Para obtener el prefijo real o la subcadena de sufijo, puede utilizar uno de los siguientes métodos. Recomiendo el primer método por su simplicidad. Todos los métodos se utilizan str
como
let str = "Hello, playground"
Método 1: (recomendado) prefix(Int)
ysuffix(Int)
let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground
Este es el mejor método en mi opinión. A diferencia de los métodos 2 y 3 a continuación, este método no fallará si los índices se salen de los límites. Simplemente devolverá todos los caracteres de la cadena.
let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground
Por supuesto, a veces las fallas son buenas porque le permiten saber que hay un problema con su código. Así que considere también el segundo método a continuación. Lanzará un error si el índice se sale de los límites.
Método 2: prefix(upto:)
ysuffix(from:)
Los índices Swift String son complicados porque deben tener en cuenta caracteres especiales (como emoji). Sin embargo, una vez que obtiene el índice, es fácil obtener el prefijo o sufijo. (Vea mi otra respuesta en String.Index
.)
let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex)) // Hello
let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex)) // ground
Si desea protegerse contra salirse de los límites, puede hacer un índice usando limitedBy
(nuevamente, vea esta respuesta ).
Método 3: subíndices
Dado que String es una colección, puede usar subíndices para obtener el prefijo y el sufijo.
let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex]) // Hello
let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...]) // ground
Otras lecturas