我希望比较apple
和Apple
时返回true
。目前的情况如下:
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
我希望比较apple
和Apple
时返回true
。目前的情况如下:
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
casecmp
方法。如果两个字符串在不考虑大小写的情况下相等,它会返回0
。str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
或者,您可以将两个字符串都转换为小写 (str.downcase
),然后比较它们是否相等。
在Ruby 2.4.0中,你可以使用:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmp
垃圾代码感觉像在使用Java。 - Joshua Pinter"aBcDeF".downcase == "abcdef"
。这样更易读,并且在 Ruby 2.4+ 中使用 casecmp
的性能优势被消除了。 - Joshua Pinter>> str1 = "Мария"
=> "Мария"
>> str2 = "мария"
=> "мария"
>> str1.casecmp(str2) == 0
=> false
>> require 'active_support/all'
=> true
>> str1.mb_chars.downcase.to_s.casecmp(str2.mb_chars.downcase.to_s) == 0
=> true
在Ruby 2.3.1及更早版本中,它的工作方式如下。
为了减小内存占用,您可以挑选string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
编辑,Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
所以在2.4.0中,strcasecmp
不起作用;然而,在没有active_support
gem的情况下,可以手动比较UTF-8字符串:
>> str1.downcase == str2.downcase
=> true
对于ruby2.4版本,casecmp?方法可以正常工作,适用于utf-8编码的字符串(不需要mb_chars):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
但是casecmp对于UTF-8不起作用:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0
casecmp和zero?是Ruby内置方法。如果两个字符串不区分大小写相等,casecmp返回0,而zero?检查零值(==0)。
str1.casecmp(str2).zero?
0
相比,它更清晰,特别是当嵌套了更复杂的条件时。 - Capt. Crunch
casecmp
:一个大小写不敏感比较的方法,这个名字真是太傻了吧! - Zabba"Apple".casecmp("APPLE").zero?
。但个人而言,我喜欢下面Andres提供的答案,使用.casecmp?
。 - 8bithero