characters ios string swift

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.

Doc de Apple


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

Otras lecturas