2010-01-06 18 views
7

我正在使用以下代码来比较字符串,但它始终将我带到else。为什么?如何在Ruby中进行字符串比较?

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")但我得到了同样的结果。

+1

我真的不知道红宝石非常好,但为什么有这样的困难和脆弱的,如果,如果,如果其他结构?使用HashMap,如果你没有收到任何回应,请设置错误消息。 这也有助于每个人都在下面列出的换行问题。 – MikeHoss 2010-01-06 21:10:28

+0

1.我对红宝石很新,所以即使不知道HashMP是否退出? 2.我不喜欢case-when! – itsaboutcode 2010-01-06 21:12:36

回答

27

get返回的字符串在最后会有换行符。使用String#chomp删除它(即state_abbreviation = gets.chomp)。

PS:如果您使用的是案例 - 而不是if-elsif-elsif,那么您的代码看起来会更清晰(恕我直言)。

+3

对于“案例”建议+1。 100%同意! – 2010-01-06 21:01:31

+0

chomp的东西把我逼疯了....谢谢你的回答..你是真正的MVP。 – 2014-07-09 12:32:05

5

大块前,说:

state_abbreviation.chomp! 

作为一种替代的sepp2k优秀的建议,使用case,考虑作出的哈希与国家的缩写作为键。

0

gets返回您使用换行键入的内容。尝试state_abbreviation = gets.chomp

0

您正在使用得到,而且很可能你的shell /输入字符串的结尾处添加一个换行符(\ 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 
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的清晰,比的情况下短。它还允许状态对象的散列,其中键是缩写,值是对象。

+0

感谢您的信任投票!非常感激。 – 2010-01-06 21:14:36

+0

我真的会用一个'in_array?(state)'或类似的东西来使用一个数组。除非散列具有它自己的语法。 – Garrett 2010-01-06 21:15:22

+0

statehash [state_abbreviation]要么在我的示例RI或NC工作中返回一个值,否则返回nil。哈希确实有.has_key?,.has_value?但我不认为有必要在这里使用它。 – Beanish 2010-01-06 21:17:58

0

虽然我们对主题和评论方法与问题进行了评论,但请看看这个栏目。他从网站中抽取所有州的缩写。我对此很感兴趣,因为它完全从你的代码中获取映射(尽管保存网站可能是一个好主意,以防万一)。然后,您可以将其与缓存一起放置,以防止实际击中数据库。

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

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

+0

除非您拥有它,否则建立对另一个站点的依赖关系并不是一个好主意。如果网站出现故障,您的代码可能会中断,或者如果他们的网站速度很慢,则可以进行抓取。另外,如果你的代码受到很大打击,它会很多地击中他们的网站,可能会让他们花钱,而没有他们的受益。它类似于深层链接,这是一种将网站的IP添加到他们的.htaccess文件中拒绝您访问的好方法。如果数据对于该网站是唯一的,则可以安排使用权,因为它可能受版权保护。如果它不受版权保护,则在您控制其可用性的情况下构建您自己的本地存储库。 – 2010-11-29 22:28:58

相关问题