Ruby方式检查字符串是否为空白?

时间:2016-03-10 13:12:50

标签: ruby

在Ruby(不是Rails)的else if条件中检查变量是否为空的最佳方法是什么?

elsif not variable.to_s.empty?
  # do something
end

elsif !variable.to_s.empty?
  # do something
end

elsif variable.to_s.length > 0
  # do something
end

6 个答案:

答案 0 :(得分:32)

string = ""

unless string.to_s.strip.empty?
  # ...
end

答案 1 :(得分:4)

我发现''.empty?返回true' '.empty?返回false。即使to_s.length ' '也不为零。

使用strip作为' '.strip.empty?

可能更好

答案 2 :(得分:3)

您可以使用

unless var.empty?
  #do sth
end

unless var == ""
  #do sth
end

或所有这些if和否定!

答案 3 :(得分:2)

empty?方法的源类似于以下内容:

def empty?
    return length == 0      
end 

因此,您可以放心使用

any_string.length != 0

无论如何,如果在else中使用该代码有点冗长,我鼓励您在present?类内定义String方法。

class String
    def present?
        !empty?
    end
end

现在您可以通过以下方式编写代码:

if some_condition
  # do something
elsif variable.to_s.present?
  # do something else
end

通过这种方式,您可以得到清晰的代码,而无需使用难以阅读的negationsunless

当然,这里有一个问题,我从Rails中获得了present?的名称(和方法)。如果对象不是空白,present?将返回true,但是带有制表符或空格(白色字符)的字符串将被视为空白。因此,对于以下字符串,此present?将返回true:

"".present?       # => false
"   ".present?    # => true
"\t\n\r".present? # => true
" blah ".present? # => true

这取决于您想要什么,很有可能您希望前三个字符串为true,之后的字符串为false。您可以使用@RamanSM方法并使用strip来避免空格

class String
    def present?
        !strip.empty?
    end
end

现在,present?对于带有空格的字符串返回false

"".present?       # => false
"   ".present?    # => false
"\t\n\r".present? # => false
" blah ".present? # => true

答案 4 :(得分:0)

如果您更喜欢 if 而不是 unless...

如果您知道您的变量将是一个字符串...if str[0]

使用 nil check...if str && str[0] OR if str&.[](0)(我更喜欢后者,但对某些人来说它可能看起来很奇怪并且需要 Ruby >= 2.3)。

另外...我会非常小心地在任何事情上调用 #to_s 因为你最终可能会得到意想不到的结果。如果 str 结果出乎您的意料...

str = false
str.to_s[0] # => 'f' (i.e. truthy)
str.to_s.empty? # => false

str = nil
str.to_s[0] # => nil (i.e. falsey)
str.to_s.empty? # => true

我认为这种警告也适用于此处其他答案中 #to_s 的使用。例外可以成为你的朋友。

答案 5 :(得分:-1)

对于未定义/未定义的字符串(例如abc),我们应检查abc.nil? 否则abc.blank?将抛出(NoMethodError)未定义的方法empty?为nil:NilClass错误