Swift: Reemplazo de caracteres en una cadena — análisis completo para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Swift: ¿Cómo reemplazar caracteres en una cadena? Análisis completo para principiantes

\n\n

Tarde o temprano, todo desarrollador de Swift se enfrenta a la tarea: necesita reemplazar unos caracteres en una cadena por otros. Parecería que podría ser más simple? Pero los principiantes a menudo se pierden porque Swift String no es un arreglo de caracteres como en C, sino una estructura compleja compatible con Unicode. En este artículo, analizaremos las formas más populares y efectivas de reemplazar caracteres en Swift, desde las simples hasta las avanzadas.

\n\n

No enumeraremos los métodos de forma seca. En su lugar, analizaremos ejemplos reales que encontrará en la práctica: desde reemplazar espacios hasta eliminar signos de puntuación y trabajar con emojis. ¡Allá vamos!

\n\n

¿Por qué Swift String no es simplemente un arreglo de caracteres?

\n

Antes de reemplazar caracteres, es importante entender cómo está estructurada una cadena en Swift. String es una colección de Character, pero cada Character puede constar de múltiples escalares Unicode (por ejemplo, el emoji 🚀 o la letra «é» con diacríticos). Por lo tanto, la indexación por Int no funciona directamente aquí. En su lugar, Swift usa String.Index.

\n\n

Pero para reemplazar caracteres, no necesita sumergirse en las profundidades de los índices; existen métodos de alto nivel listos para usar. Veamos los más populares.

\n\n

Método n.º 1: replacingOccurrences — el rey del reemplazo

\n

La forma más simple y obvia es usar el método replacingOccurrences(of:with:). Devuelve una nueva cadena con las ocurrencias reemplazadas. La cadena original permanece sin cambios (Swift es un lenguaje con cadenas inmutables por defecto).

\n\n
let original = "Hello, World!"\nlet replaced = original.replacingOccurrences(of: "World", with: "Swift")\nprint(replaced) // "Hello, Swift!"\nprint(original) // "Hello, World!" — el original no cambió
\n\n

Este método es ideal para casos simples: reemplazar una palabra, carácter o subcadena. Pero, ¿qué hacer si necesita reemplazar varios caracteres diferentes? Por ejemplo, ¿eliminar todos los espacios y puntos?

\n\n

Cadena de llamadas para reemplazos múltiples

\n

Puede llamar a replacingOccurrences varias veces seguidas:

\n\n
let text = "Hello, World! How are you?"\nlet cleaned = text\n    .replacingOccurrences(of: ",", with: "")\n    .replacingOccurrences(of: "!", with: "")\n    .replacingOccurrences(of: " ", with: "_")\nprint(cleaned) // "Hello_World_How_are_you?"
\n\n

Inconveniente: si hay muchos reemplazos, el código se vuelve voluminoso. Para estos casos, son mejores otros métodos o expresiones regulares.

\n\n

Método n.º 2: Reemplazo con map y filter (enfoque funcional)

\n

Swift no es solo POO, sino también programación funcional. Puede recorrer cada carácter de la cadena con map y reemplazarlos según una condición. Esto es especialmente útil cuando necesita reemplazar todas las ocurrencias de un conjunto específico de caracteres.

\n\n
let input = "a1b2c3d4"\nlet result = input.map { char -> Character in\n    if char.isNumber {\n        return "X"\n    } else {\n        return char\n    }\n}\nprint(String(result)) // "aXbXcXdX"
\n\n

Aquí reemplazamos todos los dígitos por "X". ¿Y si necesita eliminar caracteres? Use filter:

\n\n
let withPunctuation = "Hello!!! How are you??"\nlet noPunctuation = withPunctuation.filter { !$0.isPunctuation }\nprint(noPunctuation) // "Hello How are you"
\n\n

Este enfoque es muy flexible: puede usar cualquier verificación — isNumber, isLetter, isWhitespace o incluso la comparación con un conjunto de caracteres.

\n\n

Método n.º 3: Expresiones regulares (NSRegularExpression)

\n

Cuando la tarea se complica (reemplazo por patrón, eliminación de todos los correos electrónicos, reemplazo de fechas), no se puede prescindir de las expresiones regulares. Swift admite NSRegularExpression de Foundation.

\n\n
import Foundation\n\nlet text = "My email is test@example.com and your is user@test.org"\nlet regex = try! NSRegularExpression                

Blogs

Book Recommendations