2014-11-24 61 views
0

所以我试图从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)。但是,当我使用用户输入作为字符串而不是仅仅输入字符串时,它不起作用。帮帮我?

+0

'chomp'通常被使用,但最直接的方式就是'gets [-2]]'。 – 2014-11-24 18:43:29

回答

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! 
2

考虑这个IRB会议:

  1. 我将输入 “富”:

    ​​

    我进入 “富”,并终止输入我不得不按返回(或输入取决于操作系统和键盘),这是“\ n”(或“\ r \ n”)换行符,取决于您的操作系统是* nix还是Windows。

  2. 看着我输入的内容:

    irb(main):002:0> user_input[-1] 
    "\n" 
    
  3. 这里是输出。注意,单引号是在不同的行,因为“\ n”是一个新行字符:(拖尾nilputs结果,而不是对于本例重要)

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

因此,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" 

这是堆栈溢出really common question。也许寻找它会有帮助?

相关问题