我有一个字符串:
"0011HelloWor00ld001"
如何计算字符串开头的零的数量?例如,上面的字符串应该返回2。
我尝试过.match(/^[0]+/)。size,但它不起作用。
.match(/^0+/)
会返回一个MatchData对象,因此你会得到1
作为结果(它表示匹配数组中元素的数量)。
你需要获取匹配本身的大小。使用以下其中之一:
"0011HelloWor00ld001".match(/^0+/)[0].size
"0011HelloWor00ld001"[/^0+/].size
"0011HelloWor00ld001".match(/^0+/).to_s.size
^
和$
,而其他人可能会使用字符串末尾锚点\A
和\z
。既然这显然是有意为之的,我很想知道你对此的想法是什么。 - Cary Swoveland\A
。 - Wiktor Stribiżew^
和$
更古老、更常见,因此它们更常被使用。在我从事编程的这些年里,我只有在几次情况下需要使用\A
或\z
来替代^
/$
。大多数时候我在搜索包含单行的字符串,所以这没有任何区别,我会回到首先想到的方法。 - the Tin Manindex
方法,如下所示:str = '0011HelloWor00ld001'
# as noted by @steenslag if the full string is zeros index will return nil
# solve by returning full string length
str.index(/[^0]/) || str.length
#=> 2
0
的索引等于前导0
的数量可能不是很明显。 - Stefan我最喜欢@Wiktor的中间答案,但这里还有三个。
#1
def nbr_leading_zeros(str)
str.split(/[^0]/).first.size
end
nbr_leading_zeros '0011Hello00' #=> 2
nbr_leading_zeros '101' #=> 0
nbr_leading_zeros '000' #=> 3
#2
def nbr_leading_zeros(str)
str.each_char.take_while { |c| c=='0' }.size
end
#3
def nbr_leading_zeros(str)
str.match(/\A0*/)&.end(0).to_i
end
.first
,但那时列表已经很长了。 :) - Wiktor Stribiżew
"0011HelloWor00ld001"[/^0+/].size
。 - Wiktor Stribiżew