Busca em Strings
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 3 de 56.
Três verificações rápidas para saber se uma substring está contida em outra:
let email = "alice@coddy.tech"
print(email.contains("@")) // true
print(email.hasPrefix("alice")) // true
print(email.hasSuffix(".tech")) // truecontains aceita qualquer substring, enquanto hasPrefix e hasSuffix olham apenas para o início ou o fim. Todos eles são sensíveis a maiúsculas e minúsculas, então transforme a string em minúsculas primeiro se isso for importante.
Combine estes com ! para um teste rápido de "está faltando":
if !email.contains("@") {
print("not a valid email")
}Desafio
FácilLeia uma única linha de entrada. Valide-a como um e-mail simples verificando todos estes itens:
- Ela contém exatamente um
@(usefilter+countnos caracteres) - Ela não começa nem termina com
@ - Ela termina com
.tech,.comou.org(insensível a maiúsculas e minúsculas)
Imprima valid quando todas as verificações passarem, caso contrário invalid. Compare com a versão em letras minúsculas da entrada.
Para a entrada alice@CODDY.TECH, a saída é valid.
Folha de consulta
Verifique se uma string contém uma substring, ou se começa/termina com uma:
let email = "alice@coddy.tech"
email.contains("@") // true – em qualquer lugar da string
email.hasPrefix("alice") // true – no início
email.hasSuffix(".tech") // true – no finalTodos os três são case-sensitive. Use .lowercased() primeiro, se necessário:
email.lowercased().hasSuffix(".tech")Use ! para testar a ausência:
if !email.contains("@") { print("not a valid email") }Experimente você mesmo
let line = readLine()!
// TODO: validar exatamente um '@', não nas extremidades, sufixo em [.tech .com .org]
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Contagem e ÍndicesCase e TrimBusca em StringsDivisão e JunçãoSubstituindo SubstringsRecapitulação - Verificação de Nome de Usuário4Conjuntos
Criando ConjuntosUnião e InterseçãoSubtração e Diferença SimétricaSubconjunto e SuperconjuntoRecapitulação - Filtro de Tags7Projeto - Monitor de Hábitos
Visão Geral do ProjetoMarcar como Concluído10Projeto - Mecanismo de Quiz
Visão Geral do ProjetoFazer Perguntas2Intervalos e Strides
Fechado vs Meio-AbertoStrideMétodos de IntervaloIntervalos no SwitchRecapitulação - Grade de Calendário5Funções de Ordem Superior Parte 1
MapFilterReduceEncadeando map, filter, reduceRecapitulação - Estatísticas de Palavras