【问题标题】:How to get a substring of text?如何获取文本的子字符串?
【发布时间】:2011-09-05 07:06:03
【问题描述】:

我的文本长度约为 700。我怎样才能只得到它的前 30 个字符?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    使用String#slice,别名为[]

    a = "hello there"
    a[1]                   #=> "e"
    a[1,3]                 #=> "ell"
    a[1..3]                #=> "ell"
    a[6..-1]               #=> "there"
    a[6..]                 #=> "there" (requires Ruby 2.6+)
    a[-3,2]                #=> "er"
    a[-4..-2]              #=> "her"
    a[12..-1]              #=> nil
    a[-2..-4]              #=> ""
    a[/[aeiou](.)\1/]      #=> "ell"
    a[/[aeiou](.)\1/, 0]   #=> "ell"
    a[/[aeiou](.)\1/, 1]   #=> "l"
    a[/[aeiou](.)\1/, 2]   #=> nil
    a["lo"]                #=> "lo"
    a["bye"]               #=> nil
    

    【讨论】:

    • 要清楚,-1 用于到达字符串的末尾,所以 a[1..-1] #=> "ello there".
    • 这对某些人来说可能很明显,但是可以在否定位置使用逗号:a[-4,-2]。唯一有效的符号是两个点:a[-4..-2]。艰难地学会了它。
    【解决方案2】:

    如果您在 rails 中需要它,您可以使用 first (source code)

    '1234567890'.first(5) # => "12345"
    

    还有last(source code)

    '1234567890'.last(2) # => "90"
    

    或者检查from/to (source code):

    "hello".from(1).to(-2) # => "ell"
    

    【讨论】:

    • NoMethodError: undefined method `first' for "abcde":String ,这是一个rails实现吗?
    • 是的。但您也可以复制我发布的源代码表单链接
    【解决方案3】:

    如果您想要一个字符串,那么其他答案都可以,但如果您要查找的是前几个字母作为字符,您可以将它们作为列表访问:

    your_text.chars.take(30)
    

    【讨论】:

      【解决方案4】:

      既然你把它标记为 Rails,你可以使用 truncate:

      http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-truncate

      例子:

       truncate(@text, :length => 17)
      

      Excerpt 也很高兴知道,它可以让您显示文本的摘录,如下所示:

       excerpt('This is an example', 'an', :radius => 5)
       # => ...s is an exam...
      

      http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-excerpt

      【讨论】:

      • @JoóÁdám 标签已被 Andrew Marshall 更改
      • 是否有任何改变的理由?如果 OP 在 Rails 中工作并要求在 Rails 中提供解决方案,那么问题应该用 Rails 标记。然后你的答案就有意义了。
      • @JoóÁdám 这个问题被 OP 标记为 Rails,这就是重点
      • 我明白了,我不明白为什么要删除标签。我已经编辑了这个问题,并明确表示它是关于 Rails 的。它正在等待审核。
      • 我对您的答案投了反对票,现在我无法删除它,因为它已被锁定。如果您进行一些编辑(也许明确说明它是 Rails 内置的?),那么我可以删除反对票。
      【解决方案5】:

      如果您的文本在 your_text 变量中,您可以使用:

      your_text[0..29]
      

      【讨论】:

      • 所以基本上 3 点(...)意味着结束是唯一的,2 点(..)意味着结束是包容的。
      猜你喜欢
      • 2019-09-27
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多