【问题标题】:After performing string.slice() return string with part removed执行 string.slice() 后返回字符串,部分删除
【发布时间】:2014-12-05 16:29:18
【问题描述】:

我确信这很明显,但我似乎无法让它发挥作用。 我有一个 Pathname 实例,我试图从中删除第一个目录,然后返回字符串的其余部分,但是由于 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/

那么我到底要如何得到已删除部分的字符串呢?

【问题讨论】:

    标签: ruby string slice


    【解决方案1】:

    使用String#split

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

    【讨论】:

    • 如果路径的长度每次都不同会怎样?
    • @SamMason,是的,上面的表达式将字符串通过/分割成两部分,得到第二部分。
    【解决方案2】:

    您也可以使用 .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"
    

    虽然这会不可逆地影响您的文件路径变量。

    【讨论】:

      【解决方案3】:

      #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 返回 [head,sep,tail] 所以这看起来像 ["","this_folder_needs_to_go","/another_folder/file.html"] [-1] 表示获取最后一个元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-02
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        相关资源
        最近更新 更多