当字符串太长时截断

2024-04-27

我有两个字符串:

short_string = "hello world"
long_string = "this is a very long long long .... string" # suppose more than 10000 chars

我想改变默认行为print to:

puts short_string
# => "hello world"
puts long_string
# => "this is a very long long....."

The long_string仅部分打印。我尝试改变String#to_s,但没有成功。有谁知道该怎么做?

updated

实际上我希望它能顺利工作,这意味着以下情况也能正常工作:

> puts very_long_str
> puts [very_long_str]
> puts {:a => very_long_str}

所以我认为该行为属于字符串。

无论如何,谢谢大家。


首先,你需要一个方法truncate一个字符串,类似于:

def truncate(string, max)
  string.length > max ? "#{string[0...max]}..." : string
end

或者通过扩展String:(不过,不建议更改核心类)

class String
  def truncate(max)
    length > max ? "#{self[0...max]}..." : self
  end
end

现在你可以打电话truncate打印字符串时:

puts "short string".truncate
#=> short string

puts "a very, very, very, very long string".truncate
#=> a very, very, very, ...

或者你可以定义你自己的puts:

def puts(string)
  super(string.truncate(20))
end

puts "short string"
#=> short string

puts "a very, very, very, very long string"
#=> a very, very, very, ...

注意Kernel#puts http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-puts接受可变数量的参数,您可能想要更改您的puts相应的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当字符串太长时截断 的相关文章

随机推荐