代码之家  ›  专栏  ›  技术社区  ›  itsaboutcode

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

  •  7
  • itsaboutcode  · 技术社区  · 15 年前

    我正在使用以下代码比较字符串,但它总是将我带到 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 回复  |  直到 14 年前
        1
  •  27
  •   sepp2k    15 年前

    gets返回的字符串将在结尾处有一个换行符。使用 String#chomp 移除它(即 state_abbreviation = gets.chomp )

    PS:如果您使用case-when而不是if-elsif-elsif,那么您的代码看起来会更干净(imho)。

        2
  •  15
  •   Beanish    15 年前

    我没有足够的观点发表评论,但我认为克里斯·杰斯特·杨的散列思想真的很好。

    statehash = { "RI" => "Rhode Island", "NC" => "North Carolina" }
    
    print "Enter your state abbreviation: "
    state_abbreviation = gets.chomp.upcase
    
    puts statehash[state_abbreviation]
    

    这段代码比一堆ELSIF简洁明了,比一个案例短得多。它还允许状态对象的散列,其中键是缩写,值是对象。

        3
  •  5
  •   C. K. Young    15 年前

    在大街区之前,说:

    state_abbreviation.chomp!
    

    作为SEPP2K优秀使用建议的替代方案 case ,考虑将状态缩写作为键生成哈希。

        4
  •  0
  •   Brian Young    15 年前

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

        5
  •  0
  •   makevoid    15 年前

    您使用的是GET,并且您的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
    
        6
  •  0
  •   John Hinnegan    14 年前

    当我们不再讨论这个话题并评论这个方法和这个问题时,看看这个Rails Cast。他从一个网站上提取了所有州的缩写。我很喜欢这个,因为它完全能从代码中得到映射(不过,为了以防万一,保存这个站点可能是个好主意)。然后您可以将它与缓存放在一起,以防止实际命中数据库。

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

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

    推荐文章