我使用以下代码来比较字符串,但它总是将我带到else
。为什么?
print("Enter your state abbreviation: ")
state_abbreviation = gets
if state_abbreviation.upcase == "NC"
puts("North Carolina")
elsif state_abbreviation.upcase == "SC"
puts("Sourth Carolina")
elsif state_abbreviation.upcase == "GA"
puts("Georgia")
elsif state_abbreviation.upcase == "FL"
puts("Florida")
elsif state_abbreviation.upcase == "AL"
puts("Alabama")
else
puts("You have enter wrong abbreviation")
end
我也尝试了.eql?("string")
,但我得到的结果相同。
答案 0 :(得分:28)
gets返回的字符串最后会有一个换行符。使用String#chomp
将其删除(即state_abbreviation = gets.chomp
)。
PS:如果您使用case-when而不是if-elsif-elsif,那么您的代码看起来会更清晰(恕我直言)。
答案 1 :(得分:15)
我没有足够的评论意见,但我认为Chris Jester-Young的哈希想法非常简洁。
statehash = { "RI" => "Rhode Island", "NC" => "North Carolina" }
print "Enter your state abbreviation: "
state_abbreviation = gets.chomp.upcase
puts statehash[state_abbreviation]
这段代码比一堆elsif更简洁明了,而且比一个案例更短。它还允许状态对象的散列,其中键是缩写,值是对象。
答案 2 :(得分:5)
在大块之前,说:
state_abbreviation.chomp!
作为sepp2k使用case
的绝佳建议的替代方案,请考虑使用状态缩写作为键来制作哈希。
答案 3 :(得分:0)
gets
会返回您使用换行符输入的内容。试试state_abbreviation = gets.chomp
答案 4 :(得分:0)
你正在使用gets,可能你的shell / input在字符串的末尾添加了换行符(\ n),也许你可能想要使用case语句:
示例:
print("Enter your state abbreviation: ")
state_abbreviation = gets.strip
case state_abbreviation
when "NC" then puts("North Carolina")
when "SC" then puts("South Carolina")
# ...
else puts("You have enter wrong abbreviation")
end
答案 5 :(得分:0)
虽然我们偏离主题并评论方法与问题,但请查看此rails cast。他从网站上提取所有州的缩写。我是粉丝,因为它完全从代码中获取映射(尽管保存站点可能是个好主意,以防万一)。然后,您可以将其与缓存放在一起,以防止实际访问数据库。