Ruby:如何获得一个string的第一个字符

如何使用Ruby获取string中的第一个字符?

最终,我正在做的是取出别人的姓氏,并创build一个初始的名字。

所以如果string是“史密斯”,我只想要“S”。

你可以使用Ruby的开放类来使你的代码更具可读性。 比如这个:

 class String def initial self[0,1] end end 

将允许你使用任何string的initial方法。 所以如果你有以下variables:

 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..0] 

在ruby1.8和ruby1.9中工作。

在MRI 1.8.7或更高版本中:

 'foobarbaz'.each_char.first 

为了完整起见,因为Ruby 1.9 String#chr返回string的第一个字符。 它仍然在2.0和2.1。

 "Smith".chr #=> "S" 

http://ruby-doc.org/core-1.9.3/String.html#method-i-chr

在Rails中

 name = 'Smith' name.first 
 >> s = 'Smith' => "Smith" >> s[0] => "S" 

尝试这个:

 >> a = "Smith" >> a[0] => "S" 

要么

 >> "Smith".chr #=> "S" 

由于在1.9之前的Ruby中有一个令人讨厌的deviseselect, some_string[0]返回第一个字符的字符代码 – 最简单的写法是some_string[0,1] ,它告诉它得到索引为0的子string1个字符长。

任何这些方法都可以工作:

 name = 'Smith' puts name.[0..0] # => S puts name.[0] # => S puts name.[0,1] # => S puts name.[0].chr # => S