Para obter os últimos n
caracteres de uma string, presumi que você poderia usar
ending = string[-n..-1]
mas se a string tiver menos do que n
letras, você obterá nil
.
Quais soluções alternativas estão disponíveis?
Contexto : as strings são ASCII simples e eu tenho acesso ao ruby 1.9.1 e estou usando Plain Old Ruby Objects (sem frameworks web).
chars
vez de dividir.join
funciona. Não acho que você precise do últimoto_s
se usar o join.n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i
eu precisava do to_s para realizar o to_i para extrair o valor numérico."123".split(//).last(5).join
(Ruby 2.0.0)Bem, a solução alternativa mais fácil que posso pensar é:
(EDITAR: O
or
operador tem precedência inferior à atribuição, portanto, certifique-se de usar em seu||
lugar.)fonte
string.reverse[0..n].reverse
, o que me dá um segundo de "espere, por que ele está fazendo isso?" (ou faria se eu não estivesse lendo no contexto desta questão)||
vez deor
, ou colocar entre parêntesesstr[-n..-1] or str
.Em Ruby direto (sem Rails), você pode fazer
Por exemplo:
Se estiver usando Ruby on Rails, você pode chamar métodos
first
elast
em um objeto string. Esses métodos são preferidos porque são sucintos e intuitivos.Por exemplo:
fonte
fonte
"abcde".reverse[0,3].reverse
>>> "cde""ab".reverse[0,3].reverse
>>> "ab""a".reverse[0,3].reverse
>>> "a"Você pode usar o seguinte código:
fonte
Para obter os últimos n caracteres de uma string, você pode fazer isso
a [-n, n] se a for a matriz.
Aqui está um exemplo, se você quiser um.
ruby-1.9.2-p180: 006> a = "911234567890"
=> "911234567890"
rubi-1.9.2-p180: 009> a [-5,5]
=> "67890"
rubi-1.9.2-p180: 010> a [-7,7]
=> "4567890"
fonte
nil
será retornado, que é o que esta pergunta estava especificamente tentando evitar.Você tentou um regex?
O regex captura quantos caracteres puder no final da string, mas não mais do que n. E armazena em $ 1.
fonte
Melhoria na resposta da EmFi.
fonte