Ruby:如何计算字符串开头和结尾的空格数量?

9
为了计算字符串 s 开头和结尾的空格数量,我这样做:
s.index(/[^ ]/)              # Number of spaces at the beginning of s
s.reverse.index(/[^ ]/)      # Number of spaces at the end of s

这种方法需要单独处理只包含空格的 s 的边缘情况。

有更好(更简洁/高效)的方法吗?

5个回答

16

另一种版本,这应该是最短的可能版本

s[/\A */].size
s[/ *\z/].size

对于像“aa”或空字符串这样的情况,最好使用*而不是+ - steenslag

3

你可以一次性完成它:

_, spaces_at_beginning, spaces_at_end = /^( *).*?( *)$/.match(s).to_a.map(&:length)

但绝对不够优雅。


2

我不知道它是否更高效,但这也可以正常工作。

s.count(' ') - s.lstrip.count(' ')
s.count(' ') - s.rstrip.count(' ')

1

这也很容易实现:

beginning =  s.length - s.lstrip.length
ending = s.length - s.rstrip.length

如果s包含其他的空格,例如s = "\tx",那么这种方法就行不通了。 - Misha Moroshko
\t 会被视为一个空格。然而,也许我没有理解你的意思;你想如何处理制表符的情况? - Alberto Moriconi
"\t" 应该被视为普通字符。这个问题是关于计算空格的。 - Misha Moroshko
抱歉,我没有完全理解你的问题 :) - Alberto Moriconi

1
s.split(s.strip).first.size
s.split(s.strip).last.size

你也可以这样做

beginning_spaces_length , ending_spaces_length = s.split(s.strip).map(&:size) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接