2014-10-10 73 views
0

我確定這是非常明顯的,但我似乎無法得到它的工作。 我有一個Pathname實例,並試圖從它刪除第一個目錄,然後返回字符串的其餘部分,但由於切片返回部分刪除似乎沒有辦法讓較小的字符串回來。執行完string.slice()後返回的字符串與部分刪除

filepath = Pathname.new("this_folder_needs_to_go/another_folder/file.html") 
filedir = filepath.to_s.slice("this_folder_needs_to_go/") 
newfilepath = filedir 

我希望newfilepathanother_folder/file.html而是它只返回this_folder_needs_to_go/

因此,如何在地球上,我得到的已移除部分的字符串?

回答

2

使用String#split

"this_folder_needs_to_go/another_folder/file.html".split('/', 2)[1] 
# => "another_folder/file.html" 
+0

如果路徑長度每變化一次,那麼該怎麼辦? – 2014-10-10 13:27:40

+0

@SamMason,是的,上面的表達式通過'/'將字符串分成兩部分,得到第二部分。 – falsetru 2014-10-10 13:28:49

1

您還可以使用.slice!而不是.slice如果你試圖修改你的字符串

filepath = Pathname.new("this_folder_needs_to_go/another_folder/file.html") 
filepath.to_s.slice!("this_folder_needs_to_go/") 
puts filepath ==> "another_folder/file.html" 

雖然這會影響你的文件路徑變量不可逆轉。

0

#partition還將以類似的方式工作,以#split

filepath = Pathname.new("this_folder_needs_to_go/another_folder/file.html") 
file_dir = filepath.partition("this_folder_needs_to_go/")[-1] 
file_dir 
#=> "another_folder/file.html" 

#partition返回[頭,月,尾]所以這看起來像["","this_folder_needs_to_go","/another_folder/file.html"][-1]說拿到最後一個元素。