Ruby每周一测 - 中英文混合字符串截取

这篇Ruby每周一测有点特殊,它不是翻译[url=http://rubyquiz.com/]Ruby Quiz[/url]上的文章,而是我自己出的一个quiz :) :

我们在做页面排版的时候,为了避免过长字符串撑开页面,经常需要调用截取过长字符串的方法,rails已经为我们提供了一个方法:

ActionView::Helpers::TextHelper#truncate(text, length = 30, truncate_string = "...")


调用很简单:

truncate("Once upon a time in a world far far away", 14)
# => Once upon a...

truncate("Once upon a time in a world far far away")
# => Once upon a time in a world f...

truncate("And they found that many people were sleeping better.", 25, "(clipped)")
# => And they found that many (clipped)


但是遇到中文字符串的时候它就不那么完美了:它把一个中文作为和英文相同的长度来截取,使用同样的length参数,会导致截取的英文字符串比中文字符串在[color=red][b]视觉上短很多[/b][/color]
为了解决这个问题,JavaEye使用的方法是把一个中文大约视为2个英文的宽度,实现truncate_u方法:

truncate_u(text, length = 30, truncate_string = "...")


执行结果和rails的truncate略有不同,length是指中文字宽,truncate_string不计算在length里

truncate_u("english string", 2)
# 截取2个中文字宽,所以是返回4个英文加上"..."
# => engl...

truncate_u("中文字符串", 2)
# => 中文...

truncate_u("中文 and english", 6)
# 截取6个中文字宽,所以是返回2个中文,8个ascii字符,以及truncate_string
# => 中文 and eng ...

truncate_u("中文 and english", 8)
# 完整截取,返回和输入一致的字符串
# => 中文 and english


这次的每周一测就是实现这个方法,或者你有另外更好的中英文混合字符串截取想法,也可以一起来讨论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值