Swift: Substituir caracteres em string – Guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Swift: Como substituir caracteres em uma string? Guia completo para iniciantes

\n\n

Mais cedo ou mais tarde, todo desenvolvedor Swift enfrenta a tarefa: precisa substituir alguns caracteres em uma string por outros. Parece simples, não é? Mas iniciantes frequentemente se perdem, porque Swift String não é um array de caracteres como em C, mas sim uma estrutura complexa compatível com Unicode. Neste artigo, vamos explorar as formas mais populares e eficientes de substituir caracteres em Swift, do básico ao avançado.

\n\n

Não vamos apenas listar métodos de forma seca. Em vez disso, vamos analisar exemplos reais que você encontrará na prática: desde substituir espaços até remover pontuação e trabalhar com emojis. Vamos nessa!

\n\n

Por que Swift String não é apenas um array de caracteres?

\n

Antes de substituir caracteres, é importante entender como a string funciona em Swift. String é uma coleção de Character, mas cada Character pode consistir em vários escalares Unicode (por exemplo, o emoji 🚀 ou a letra "é" com acento). Por isso, a indexação por Int não funciona diretamente. Em vez disso, o Swift usa String.Index.

\n\n

Mas para substituir caracteres, você não precisa mergulhar nos detalhes dos índices — existem métodos prontos de alto nível. Vamos ver os mais populares.

\n\n

Método #1: replacingOccurrences — o rei das substituições

\n

A maneira mais simples e óbvia é usar o método replacingOccurrences(of:with:). Ele retorna uma nova string com as ocorrências substituídas. A string original permanece inalterada (Swift é uma linguagem com strings imutáveis por padrão).

\n\n
let original = "Olá, Mundo!"\nlet substituida = original.replacingOccurrences(of: "Mundo", with: "Swift")\nprint(substituida) // "Olá, Swift!"\nprint(original) // "Olá, Mundo!" — original não mudou
\n\n

Este método é ideal para casos simples: substituir uma palavra, caractere ou substring. Mas e se você precisar substituir vários caracteres diferentes? Por exemplo, remover todos os espaços e pontos?

\n\n

Encadeamento de chamadas para múltiplas substituições

\n

Você pode chamar replacingOccurrences várias vezes em sequência:

\n\n
let texto = "Olá, Mundo! Como você está?"\nlet limpo = texto\n    .replacingOccurrences(of: ",", with: "")\n    .replacingOccurrences(of: "!", with: "")\n    .replacingOccurrences(of: " ", with: "_")\nprint(limpo) // "Olá_Mundo_Como_você_está?"
\n\n

Desvantagem: se houver muitas substituições, o código fica extenso. Para esses casos, outros métodos ou expressões regulares são mais adequados.

\n\n

Método #2: Substituição com map e filter (abordagem funcional)

\n

Swift não é apenas POO, mas também programação funcional. Você pode percorrer cada caractere da string com map e substituí-los conforme uma condição. Isso é especialmente útil quando você precisa substituir todas as ocorrências de um conjunto específico de caracteres.

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

Aqui, substituímos todos os dígitos por "X". E se você quiser remover caracteres? Use filter:

\n\n
let comPontuacao = "Olá!!! Como você está??"\nlet semPontuacao = comPontuacao.filter { !$0.isPunctuation }\nprint(semPontuacao) // "Olá Como você está"
\n\n

Essa abordagem é muito flexível: você pode usar qualquer verificação — isNumber, isLetter, isWhitespace ou até comparação com um conjunto de caracteres.

\n\n

Método #3: Expressões regulares (NSRegularExpression)

\n

Quando a tarefa se complica (substituição por padrão, remover todos os e-mails, substituir datas), as expressões regulares são indispensáveis. O Swift oferece suporte ao NSRegularExpression do Foundation.

\n\n
import Foundation\n\nlet texto = "Meu email é teste@exemplo.com e o seu é usuario@teste.org"\nlet regex = try! NSRegularExpression(pattern: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}", options: [])\nlet range = NSRange(location: 0, length: texto.utf16.count)\nlet resultado = regex.stringByReplacingMatches(in: texto, options: [], range: range, withTemplate: "[EMAIL]")\nprint(resultado) // "Meu email é [EMAIL] e o seu é [EMAIL]"
\n\n

Expressões regulares são poderosas, mas exigem cuidado com a sintaxe e o desempenho. Para iniciantes, recomendamos começar com os métodos anteriores e usar regex apenas quando necessário.

\n\n

Dicas finais para iniciantes

\n

Ao trabalhar com substituição de caracteres em Swift, lembre-se:

\n
    \n
  • Imutabilidade: Strings em Swift são imutáveis por padrão. Sempre crie uma nova string com o resultado.
  • \n
  • Unicode: Cuidado com caracteres compostos (como emojis ou letras acentuadas). Métodos como replacingOccurrences lidam bem com eles, mas map e filter operam caractere por caractere.
  • \n
  • Desempenho: Para strings muito grandes, prefira replacingOccurrences ou regex em vez de loops manuais.
  • \n
  • Teste sempre: Verifique os resultados com casos de borda, como strings vazias ou com caracteres especiais.
  • \n
\n\n

Com essas ferramentas, você está pronto para manipular strings em Swift como um profissional. Pratique com exemplos reais e, em breve, a substituição de caracteres será uma tarefa trivial no seu dia a dia!

Blogs

Book Recommendations