2011-07-03 249 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屬性,如果你仍然想通過方法來訪問它們。