赞 | 0 |
VIP | 136 |
好人卡 | 4 |
积分 | 1 |
经验 | 2058 |
最后登录 | 2013-1-17 |
在线时间 | 142 小时 |
Lv1.梦旅人 辉瑞中国首席研究员<
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 142 小时
- 注册时间
- 2008-1-18
- 帖子
- 2129
|
我今天上午就回答过LZ了
给LZ看个完整的
split([sep[, limit]])
使用sep指定的pattern来分割字符串,并将分割结果存入数组.
sep可以是下列之一
正则表达式: 把正则表达式的匹配结果当作切分符来切分字符串。如果使用了括号群组的话,与群组相匹配的字符串也会出现在最后的数组中(后文详述)。
1字节的字符串:把该字符当作切分符来进行切分(ruby 1.6)。
2字节以上的字符串:把与Regexp.new(sep)相匹配的字符串当作切分符来进行切分(ruby 1.6)。
省略 或 nil:把$;的值当作切分符来进行切分。
1字节的空白' ' 或 使用了$;且其值为nil时:除了头部的空白之外,使用空白进行切分。
空字符串'' 或 与空字符串相匹配的正则表达式:以单个字符为单位进行切分。可识别多字节字符。
例: awk split
p " a \t b \n c".split(/\s+/) # => ["", "a", "b", "c"]
p " a \t b \n c".split # => ["a", "b", "c"] ($;的默认值是nil)
p " a \t b \n c".split(' ') # => ["a", "b", "c"]
若sep中的pattern与空字符串相匹配的话,将以单个字符为单位对字符串进行切分(若正确设置了$KCODE的话,就会自动识别出汉字并进行适当的切分)。例如:
例:以字符为单位进行切分
p 'hi there'.split(/ */).join(':')
# => "h:i:t:h:e:r:e"
p 'hi there'.split(//).join(':')
# => "h:i: :t:h:e:r:e"
$KCODE = 'e'
p '文字列'.split(//).join(':')
# => "文:字:列"
若sep中的pattern包含括号,则数组中还会出现各括号的匹配结果。若括号不止一个时,则数组中就只剩下匹配结果了。例如:
例:
p '1-10,20'.split(/([-,])/) # => ["1", "-", "10", ",", "20"]
p '1-10,20'.split(/(-)|(,)/) # => ["1", "-", "10", ",", "20"]
limit可以是下列之一。
省略 或 0: 删除数组尾部的空字符串。
limit > 0: 为数组分配至多limit个元素。
limit < 0: 相当于指定limit的值为正无穷。
例: limit 的例子
# 省略limit的话,就如同把它指定为0一样。这将删除数组尾部的空字符串
p "a,b,c,,,".split(/,/) # => ["a", "b", "c"]
p "a,b,c,,,".split(/,/, 0) # => ["a", "b", "c"]
# 若limit不够大,则将剩余部分全部塞入数组的最后一个元素中
p "a,b,c,,,".split(/,/, 3) # => ["a", "b", "c,,,"]
# 若limit的值为-1或超过分割块数时,其值将被自动修改为分割块数
p "a,b,c,,,".split(/,/, 6) # => ["a", "b", "c", "", "", ""]
p "a,b,c,,,".split(/,/, -1) # => ["a", "b", "c", "", "", ""]
p "a,b,c,,,".split(/,/, 100) # => ["a", "b", "c", "", "", ""]
|
|