ios - characters - Cómo verificar qué cadena comienza con(prefijo) o termina con(sufijo) en Swift
swift string (2)
Estoy tratando de probar si una cadena Swift comienza o termina con un cierto valor. Estos métodos no existen:
var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error
También me gustaría obtener las cadenas de prefijo y sufijo. Podría encontrar una subcadena, como se responde here y here , pero los rangos son un dolor en Swift.
¿Hay una manera más fácil de hacerlo?
(Me topé con la respuesta cuando estaba leyendo la documentación , y dado que no apareció una respuesta SO para mis términos de búsqueda, estoy agregando mis preguntas y respuestas aquí).
Prefijo y sufijo de igualdad
Para verificar si una cadena tiene un prefijo o sufijo de cadena en particular, llame a los métodos hasPrefix ( :) y hasSuffix ( :) de la cadena, los cuales toman un solo argumento de tipo String y devuelven un valor booleano.
Actualizado para Swift 4
Verificando con qué comienza una Cadena y termina con
Puede usar los
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 el prefijo real y las subcadenas de sufijo
Para obtener el prefijo real o la subcadena de sufijo, puede usar uno de los siguientes métodos.
Recomiendo el primer método por su simplicidad.
Todos los métodos usan
str
como
let str = "Hello, playground"
Método 1:
prefix(Int)
(recomendado)
prefix(Int)
y
suffix(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 se bloqueará si los índices salen de los límites. Solo 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 los bloqueos son buenos porque le permiten saber que hay un problema con su código. 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:)
y
suffix(from:)
Los índices de Swift String son complicados porque tienen que 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 evitar salirse de los límites, puede hacer un índice con
limitedBy
(nuevamente, vea
esta respuesta
).
Método 3: subíndices
Como 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