ava线程 同步与异步 线程池
2011-04-24 17:50
162 查看
参考文献: http://mikeburnscoder.wordpress.com/2006/11/11/truncating-html-in-ruby/
这里不使用hpricot,而是使用ruby自己带的库rexml中的pullparser
将文件取名为string.rb,并放到rails项目的lib目录下,当然也可以根据需要,改写成helper(我就是这么做的)。
1、首先使用html格式字符串初始化PullParser:
2、然后使用pull函数每次获取一个元素:
假设字符串为:
那么上面的语句返回一个对象e,其中
3、再次执行
那么就会返回一个
4、空白和中文字符长度处理
如果要去除字符串的空白,使用:
如果要获取包含中文字符的字符串的字符长度(非字节长度),使用:
这里不使用hpricot,而是使用ruby自己带的库rexml中的pullparser
将文件取名为string.rb,并放到rails项目的lib目录下,当然也可以根据需要,改写成helper(我就是这么做的)。
require 'rexml/parsers/pullparser' class String def truncate_html(len = 30) p = REXML::Parsers::PullParser.new(self) tags = [] new_len = len results = '' while p.has_next? && new_len > 0 p_e = p.pull case p_e.event_type when :start_element tags.push p_e[0] results << "<#{tags.last} #{attrs_to_s(p_e[1])}>" when :end_element results << "</#{tags.pop}>" when :text results << p_e[0].first(new_len) new_len -= p_e[0].length else results << "<!-- #{p_e.inspect} -->" end end tags.reverse.each do |tag| results << "</#{tag}>" end results end private def attrs_to_s(attrs) if attrs.empty? '' else attrs.to_a.map { |attr| %{#{attr[0]}="#{attr[1]}"} }.join(' ') end end end
1、首先使用html格式字符串初始化PullParser:
p = REXML::Parsers::PullParser.new(self)
2、然后使用pull函数每次获取一个元素:
e = p.pull
假设字符串为:
str = '<div id="head">some text<h1>head</h1></div>'
那么上面的语句返回一个对象e,其中
e.event_type = :start_element e[0] = 'div' e[1] = {"id" => "head"} # 一个保存tag属性的hash
3、再次执行
e = p.pull
那么就会返回一个
e.event_type = :text的对象。
4、空白和中文字符长度处理
如果要去除字符串的空白,使用:
string.strip
如果要获取包含中文字符的字符串的字符长度(非字节长度),使用:
string.split(//).length
相关文章推荐
- java线程 同步与异步 线程池
- 线程、线程池、并发、同步、异步、锁
- java线程 同步与异步 线程池
- java线程 同步与异步 线程池
- java线程 同步与异步 线程池
- 关于线程池同步异步的两个试验
- VC++ .NET UI同步(使用Invoke托管方法),异步线程调用UI
- 线程的同步和异步
- 同步任务处理:异步线程中实时更新视图的处理(笔记)
- 线程中同步、异步、串行、并行
- 线程的同步和异步有何异同
- 并发:线程池异步执行与创建单独的线程执行
- Python 中的进程、线程、协程、同步、异步、回调
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结
- C++实现一个半同步半异步线程池
- 线程的同步及线程池
- springboot 定时任务(线程配置,并行【同步】、异步等)
- Boost库实现线程池学习及线程实现的异步调用
- 线程的同步和异步(转发)
- 浅析 线程 进程 阻塞 非阻塞 同步 异步整理