我如何在Ruby中进行字符串比较?

时间:2010-01-06 20:57:09

标签: ruby

我使用以下代码来比较字符串,但它总是将我带到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"),但我得到的结果相同。

6 个答案:

答案 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。他从网站上提取所有州的缩写。我是粉丝,因为它完全从代码中获取映射(尽管保存站点可能是个好主意,以防万一)。然后,您可以将其与缓存放在一起,以防止实际访问数据库。

http://railscasts.com/episodes/179-seed-data

http://railscasts.com/episodes/115-caching-in-rails-2-1