Ruby:从用户输入中获取最后一个字符

时间:2014-11-24 17:29:21

标签: ruby

所以我试图在Ruby中找到用户输入的最后一个字符。

我尝试了以下内容 -

print "Enter in a string: "
user_input = gets
end_char = user_input[-1,1]
puts "#{end_char} is the last char!"

但它又回来了  “是最后一个字母!” 我试过了

end_char = "test"[-1,1]

并且它应该正常工作(返回t)。但是当我使用用户输入作为字符串而不是仅仅键入字符串本身时它不起作用。帮助

2 个答案:

答案 0 :(得分:6)

所以当你说"输入一个字符串"然后你输入" foo",你做的最后一件事是什么?那么你明显进入了!所以你实际捕获的是"foo\n"

调用user_input[-1,1]实际上会返回\n返回符号,该符号只会在输出中打印中断返回。

print "Enter in a string: "
user_input = gets.chomp
end_char = user_input[-1,1]
puts "#{end_char} is the last char!"

#chomp方法实际上从输入中删除了返回字符。

现在我跑的时候:

stacko % ruby puts.rb
Enter in a string: hi Lupo90
0 is the last char!

答案 1 :(得分:2)

考虑这个IRB会议:

  1. 我会输入“foo”:

    irb(main):001:0> user_input = gets
    foo
    "foo\n"
    

    我输入“foo”,要终止输入,我必须按返回(或输入,具体取决于操作系统和键盘),这是“\ n “(或”\ r \ n“)行尾,取决于您的操作系统是* nix还是Windows。

  2. 看看我输入的内容:

    irb(main):002:0> user_input[-1]
    "\n"
    
  3. 这是输出的内容。请注意,单引号位于不同的行上,因为“\ n”是换行符:

    irb(main):003:0> puts "'\n'"
    '
    '
    nil
    

    (尾随nilputs的结果,对此示例并不重要。)

  4. 因此,gets返回了输入的所有内容,包括尾随的新行。我们来解决这个问题:

    irb(main):004:0> user_input = gets.chomp
    foo
    "foo"
    irb(main):005:0> user_input[-1]
    "o"
    irb(main):006:0> puts '"%s" is the last char' % [user_input[-1]]
    "o" is the last char
    

    chomp用于从字符串末尾删除尾随行尾:

    irb(main):010:0> "foo\n".chomp
    "foo"
    irb(main):011:0> "foo\r\n".chomp
    "foo"
    

    这是Stack Overflow上的really common question。也许寻找它会有帮助吗?