如何使用Ruby获取字符串中的第一个字符?
我的最终目的是将某人的姓氏转换为首字母缩写。
因此,如果字符串是“Smith”,我只想要“S”。
您可以使用 Ruby 的开放类,使您的代码更易读。例如:
class String
def initial
self[0,1]
end
end
将使您能够在任何字符串上使用initial
方法。因此,如果您有以下变量:
last_name = "Smith"
first_name = "John"
然后你可以非常清晰和易读地获取缩写:
puts first_name.initial # prints J
puts last_name.initial # prints S
这里提到的另一种方法在 Ruby 1.8 上不起作用(不过你现在也不应该再使用 1.8 了!但在回答发布时,它仍然很常见):
puts 'Smith'[0] # prints 83
当然,如果您不需要经常这样做,那么定义方法可能会过于繁琐,您可以直接这样做:
puts last_name[0,1]
如果你使用的是较新的 Ruby 版本(1.9.0 或更高版本),以下代码应该可以正常工作:
'Smith'[0] # => 'S'
如果你使用 1.9.0+ 或者 1.8.7,下面的代码应该可以正常工作:'Smith'.chars.first # => 'S'
如果您使用的版本早于1.8.7,则应该可以正常工作:
'Smith'.split(//).first # => 'S'
请注意,'Smith'[0,1]
在1.8上不起作用,它将不能给你第一个字符,它只会给你第一个字节。
"Smith"[0]
将返回字符 'S' 的整数值。两个版本都遵守 "Smith"[0,1] == "S"
。 - rampion"Smith"[0,1]
在1.8版本上可以使用(假设使用ASCII编码)。不确定为什么您对请求者以及所有想从该问题中学习的人都做出了如此多的假设。例如,Mac OS X预装了Ruby 1.8,因此这些用户无需安装。 - Marc-André Lafortune"Smith"[0..0]
在 Ruby 1.8 和 Ruby 1.9 中都能运行。
为了完整起见,自从Ruby 1.9版本起,String#chr返回字符串的第一个字符。它仍然在2.0和2.1版本中可用。
"Smith".chr #=> "S"
.first
不同的是,它不需要Rails来处理字符串。 - omikes试试这个:
>> a = "Smith"
>> a[0]
=> "S"
或者
>> "Smith".chr
#=> "S"
在MRI 1.8.7或更高版本中:
'foobarbaz'.each_char.first
在Rails中
name = 'Smith'
name.first
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
还有一种选择还没有被提到:
> "Smith".slice(0)
#=> "S"
由于 Ruby 1.9 之前的设计选择有点烦人 — some_string[0]
返回第一个字符的字符编码 — 最具可移植性的写法是 some_string[0,1]
,它告诉它获取索引为 0 的子字符串,长度为 1 个字符。
'Smith'.first
。 - Walking Wiki"Smith".chr #=> "S"
。 - Tyler James Young