论坛首页 编程语言技术论坛

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

浏览 18948 次
精华帖 (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的要求。
0 请登录后投票
   发表时间:2008-07-14  
这个事情这样做不是最好的方法。最好使用CSS来做。
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间: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

0 请登录后投票
   发表时间: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来对待——然而绝大多数人都把这个当成既定的解决方案,这才是问题所在。
0 请登录后投票
   发表时间:2008-07-21  
lintide 写道
to Quake Wang
你的方法很好,但是当length较大时,运行时间却相对可怕,即使text非常短。

是的,我在前面已经提到过,这个方法在length比较小的时候性能很好,但是一旦超过50,就会急剧下降,这和ruby 1.8的正则表达式效率低下有关系,如果要截取比较长的字符,用其他人的解法比较好。
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics