锁定老帖子 主题:Ruby每周一测 - 中英文混合字符串截取
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-27
sea gull 写道 carlosbdw 写道 sea gull 写道 用ruby1.9,特别的简单了:
#-*- coding:utf-8 -*- puts "Once u你好pon a time in a world far far away"[0,15] 能不能把运行结果也贴出来啊? ruby truncate_test.rb Once u你好pon a 这个只是简单的截字,不符合quiz的要求。 |
|
返回顶楼 | |
发表时间:2008-07-14
这个事情这样做不是最好的方法。最好使用CSS来做。
|
|
返回顶楼 | |
发表时间:2008-07-14
只有CSS3的text-overflow才支持截字,但是目前访问JavaEye的浏览器有IE6~8,firefox2~3,opera9.x等多种版本,对这个特性支持都有差异:
http://www.w3.org/TR/2003/CR-css3-text-20030514/#text-overflow |
|
返回顶楼 | |
发表时间:2008-07-17
to Quake Wang
你的方法很好,但是当length较大时,运行时间却相对可怕,即使text非常短。 比如运行如下代码: truncate("Ruby每周一测 - 中ADFEE英文混合ruby on rails 字符串ruby on rails",200) 这段代码几乎让我的电脑崩溃,在系统监视器中发现irb使用50%左右的CPU,共耗时:103.769055秒。 如果把上面字符串中的"ruby on rails"去掉,运行时间却只有:0.636834秒。这两个数字相差太远了. 硬件环境: T5500 1.6G 双核CPU,1G内存 软件环境: OS:ubuntu 8.04 ruby:ruby 1.8.6 |
|
返回顶楼 | |
发表时间:2008-07-19
Quake Wang 写道 只有CSS3的text-overflow才支持截字,但是目前访问JavaEye的浏览器有IE6~8,firefox2~3,opera9.x等多种版本,对这个特性支持都有差异:
http://www.w3.org/TR/2003/CR-css3-text-20030514/#text-overflow Web的一个特点就是并非要完美,而是优雅衰退。不支持text-overflow并不会造成很大的问题,只是效果上打点折扣。 截字的问题是,中文是英文两倍宽这个假设本身就很脆弱,站不住脚——除非你都用的是等宽字体(就像命令行那样)。 即便要追求效果完美,我指CSS,还有一点就是通过一些技巧可以计算实际的宽度显示,这才是真正满足现实需求的做法。截字只是一个很工程师头脑的想法——除非他确实考虑过所有的问题,并理性的将截字法作为一个经过折衷的Workaround来对待——然而绝大多数人都把这个当成既定的解决方案,这才是问题所在。 |
|
返回顶楼 | |
发表时间:2008-07-21
lintide 写道 to Quake Wang
你的方法很好,但是当length较大时,运行时间却相对可怕,即使text非常短。 是的,我在前面已经提到过,这个方法在length比较小的时候性能很好,但是一旦超过50,就会急剧下降,这和ruby 1.8的正则表达式效率低下有关系,如果要截取比较长的字符,用其他人的解法比较好。 |
|
返回顶楼 | |
发表时间:2008-09-21
class String
def truncate_chinese(length) ret = '' count = 0 self.scan(/./u).each do |c| ret << c count += (c.length == 1 ? 0.5 : 1) break if count >= length end return ret end end |
|
返回顶楼 | |