Tal como tudo em Ruby, uma String é um objeto.
As strings são compostas por uma sequência arbitrária de bytes (normalmente carateres) e são inicializadas e manipuladas como qualquer outro objeto.
Na verdade, uma das coisas mais úteis do Ruby é a quantidade de métodos que podes chamar em strings (e noutros objetos) para te poupar muito tempo a escrever código.
Neste exercício vamos explorar e brincar com alguns desses métodos auxiliares.
Embora possas usar String.new(...) para criar uma string, é muito mais comum usar um literal.
Há muitos literais diferentes que podes usar, e dividem-se em duas categorias: os que permitem interpolação e os que não permitem.
Os literais mais comuns são as aspas simples e as aspas duplas ('...' e "...").
As aspas simples não permitem interpolação, mas as aspas duplas permitem.
A interpolação acontece quando incluímos uma string dentro de outra usando a sintaxe #{}.
# Use single quotes when not interpolated
location = 'World'
# And double quotes when interpolated
puts "Hello, #{location}!" #=> "Hello, World!"
Também podes usar outros literais, como %{... } para strings interpoladas e %q{...} para strings não interpoladas.
São úteis se as tuas strings contiverem os carateres ' ou ".
Nota: não há nenhuma regra absoluta que diga que tens de usar strings não interpoladas se a tua string não contiver interpolação.
É útil pensar nas strings em Ruby de forma semelhante à forma como pensas nos arrays.
Têm um tamanho e os seus carateres estão indexados (com 0 como primeiro índice):
my_string = "Some string"
my_string.size #=> 11
my_string[0] #=> 'S'
my_string[1] #=> 'o'
my_string[-1] #=> 'g'
# Find the first index of a character
my_string.index('m') #=> 2
Podemos extrair partes de strings usando índices ou slice:
my_string = "Some string"
# Find three characters starting with the second character (index 1)
my_string[1, 3] #=> "ome"
my_string.slice(1, 3) #=> "ome"
Os valores semânticos das strings também podem ser manipulados. Vale a pena explorar a documentação do Ruby para conheceres todos os métodos, mas aqui ficam alguns exemplos de uso comum:
"hello".capitalize #=> "Hello"
"HELLO".downcase #=> "hello"
"hello".center(9) #=> " hello "
" hello ".strip #=> "hello"
"hello world".split(" ") #=> ["hello", "world"]
Também podes usar métodos como gsub para substituir carateres:
# Replace one character with another
"noob".gsub("o","0") #=> "n00b"
# (Advanced) Replace a regular expression
"Ruby really rocks".gsub(/[aieou]/,'') #=> "Rby rlly rcks"
Em todos os exemplos acima, é devolvida uma nova String.
No entanto, muitos métodos têm equivalentes que terminam em ! e que modificam a própria string.
# Use normal methods to return new strings
my_string = "hello"
my_string.capitalize #=> "Hello"
puts my_string #=> "hello"
# And bang-methods (...!) to modify the object
my_string = "hello"
my_string.capitalize! #=> "Hello"
puts my_string #=> "Hello"
Neste exercício vais processar linhas de registo.
Cada linha de registo é uma string com o seguinte formato: "[<LEVEL>]: <MESSAGE>".
Existem três níveis de registo diferentes:
INFOWARNINGERRORTens três tarefas, e cada uma recebe uma linha de registo e pede-te que faças algo com ela. Há muitas formas de resolver estas tarefas: escolhe os teus métodos preferidos dos exemplos acima e vê o que consegues arranjar.
Implementa o método LogLineParser#message para devolver a mensagem de uma linha de registo:
LogLineParser.new('[ERROR]: Invalid operation').message
# => "Invalid operation"
Qualquer espaço em branco no início ou no fim deve ser removido:
LogLineParser.new("[WARNING]: Disk almost full\r\n").message
# => "Disk almost full"
Implementa o método LogLineParser#log_level para devolver o nível de registo de uma linha de registo, que deve ser devolvido em minúsculas:
LogLineParser.new('[ERROR]: Invalid operation').log_level
# => "error"
Implementa o método LogLineParser#reformat, que reformata a linha de registo, colocando a mensagem primeiro e o nível de registo depois, entre parênteses:
LogLineParser.new('[INFO]: Operation completed').reformat
# => "Operation completed (info)"
Inscreve-te no Exercism para aprenderes e dominares Ruby com 21 conceitos121 exercícios, e mentoria humana real, tudo grátis.