Como tudo em Ruby, uma String é um objeto.
As strings são formadas por uma sequência arbitrária de bytes (normalmente caracteres) e são inicializadas e manipuladas como qualquer outro objeto.
Na verdade, uma das coisas mais úteis do Ruby são os inúmeros métodos que podem ser chamados em strings (e em outros objetos) para economizar muito do seu tempo escrevendo código.
Neste exercício, vamos explorar e brincar com alguns desses métodos auxiliares.
Embora você possa usar String.new(...) para criar uma string, é muito mais comum usar um literal.
Existem muitos literais diferentes que você pode usar, e eles se dividem em duas categorias: os que permitem interpolação e os que não permitem.
Os literais mais comuns são as aspas simples e duplas ('...' e "...").
As aspas simples não permitem interpolação, enquanto as aspas duplas permitem.
A interpolação é quando uma string é incluída em outra usando a sintaxe #{}.
# Use single quotes when not interpolated
location = 'World'
# And double quotes when interpolated
puts "Hello, #{location}!" #=> "Hello, World!"
Você também pode usar outros literais, como %{... } para strings interpoladas e %q{...} para strings não interpoladas.
Eles são úteis se as suas strings contiverem os caracteres ' ou ".
Observação: não existe uma regra absoluta dizendo que você precisa usar strings sem interpolação se a sua string não contiver interpolação.
É útil pensar nas strings em Ruby de forma parecida com a maneira como você pensa em arrays.
Elas têm um tamanho e seus caracteres sã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
Partes de strings podem ser extraídas 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 conhecer todos os métodos, mas aqui estão alguns exemplos de uso comum:
"hello".capitalize #=> "Hello"
"HELLO".downcase #=> "hello"
"hello".center(9) #=> " hello "
" hello ".strip #=> "hello"
"hello world".split(" ") #=> ["hello", "world"]
Você também pode usar métodos como gsub para substituir caracteres:
# 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, uma nova String é retornada.
No entanto, muitos métodos têm equivalentes que terminam em ! e que de fato 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, você vai processar linhas de log.
Cada linha de log é uma string formatada assim: "[<LEVEL>]: <MESSAGE>".
Existem três níveis de log diferentes:
INFOWARNINGERRORVocê tem três tarefas, e cada uma delas recebe uma linha de log e pede que você faça algo com ela. Existem muitas formas de resolver essas tarefas: escolha os seus métodos favoritos entre os exemplos acima e veja o que você consegue criar.
Implemente o método LogLineParser#message para retornar a mensagem de uma linha de log:
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"
Implemente o método LogLineParser#log_level para retornar o nível de log de uma linha de log, que deve ser retornado em minúsculas:
LogLineParser.new('[ERROR]: Invalid operation').log_level
# => "error"
Implemente o método LogLineParser#reformat, que reformula a linha de log, colocando a mensagem primeiro e o nível de log depois dela entre parênteses:
LogLineParser.new('[INFO]: Operation completed').reformat
# => "Operation completed (info)"
Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.