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。也許尋找它會有幫助?

相關問題