2011-07-03 250 views
3

我有字符串"001-1776591-7",我想把它分成3部分,"-"split参数。如何将字符串分成三部分?

我已经创建了两个方法,第一个和最后一个,但字符串的第二部分怎么样,我怎么能得到它?


更多信息:

我创建了两种方法在我的课,但加载视图时,我得到一个错误,具体如下:

def serie 
     @serie || cedula.to_s.split('-').[0] : @serie 
    end 

    def identificador 
     @identificador || cedula.to_s.split('-').[1] : @identificador 
end 

def verificador 
     @verificador || cedula.to_s.split('-').[2] : @verificador 
end 


SyntaxError in TecnicosController#index 

/home/lurraca/Desktop/rails_project/ArLink/app/models/tecnico.rb:7: syntax error, unexpected '[' 
      @serie || cedula.to_s.split('-').[0] : @serie 
             ^
/home/lurraca/Desktop/rails_project/ArLink/app/models/tecnico.rb:11: syntax error, unexpected '[' 
...dor || cedula.to_s.split('-').[1] : @identificador 
...       ^
/home/lurraca/Desktop/rails_project/ArLink/app/models/tecnico.rb:15: syntax error, unexpected '[' 
      @verificador || cedula.to_s.split('-').[2] : @verificador 
+1

请注意,语法错误指定''[''为意外。数组中的索引不使用'。[]'格式,而应该是'[]'。 –

回答

8

split方法返回一个数组,因此您可以像访问任何其他数组的第二个元素一样访问它的第二个元素:array[1]。此外,使用||栏可以使您的代码更简单。试试这个:

def serie 
    @serie || cedula.to_s.split('-')[0] 
end 

def banana 
    @banana || cedula.to_s.split('-')[1] 
end 

def verificador 
    @verificador || cedula.to_s.split('-')[2] 
end 
+0

感谢您的详细解答。我在原始问题中添加了更多信息,希望您能帮助解决这个问题。 –

+0

由于您没有完全复制我的代码,因此您会收到语法错误!在'['之前不应该有一段时间。 –

+0

如何在这里使用'|| ='来保存结果以便以后调用? –

4
cedula.to_s.split('-')[1] 

split返回数组。

1
cedula.to_s.split('-')[0] is the same as cedula.to_s.split('-').first 

cedula.to_s.split('-')[1] is the second part of your string 

cedula.to_s.split('-').last is the last part in this case the third which can be accessed  via: cedula.to_s.split('-')[2] as well 


> cedula.to_s.split('-') 
=> ["001", "1776591", "7"] 

split将一个字符串转换成数组。一个阵列的元件可以访问如下方式:

阵列[0],阵列[1]等...

阵列从0

9

开始为什么不设置它们全部一次?

@serie, @identificador, @verificador = cedula.split('-') 

你可以让他们通过attr_accessorattr_reader属性,如果你仍然想通过方法来访问它们。