Project1

标题: 谁给解释一下name.split [打印本页]

作者: MPlayer    时间: 2008-11-2 22:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2008-11-2 22:38
a = "asdff,adf,sdf".split(/,/)

p a #=> ["asdff","adf","sdf"]

p "asdff,adf,sdf".split(/,/)[0] #=> "asdff"
作者: 苏菲娅    时间: 2008-11-2 22:41
那接下来是不是这样?
p "asdff,adf,sdf".split(/,/)[1] #=> "adf"
p "asdff,adf,sdf".split(/,/)[2] #=> "sdf"
我不懂脚本,现学现卖的...楼主无视我...

作者: MPlayer    时间: 2008-11-2 22:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2008-11-2 22:47
split 是 使用 括号后面的正则来 分割字符串,然后返回包含子字符串的数组,也就是

a = "asdff,adf,sdf".split(/,/)

p a #=> ["asdff","adf","sdf"]

这里的 a 就是 分割的结果。

然后调用 [ ] 来取得 a 数组里的元素,也就是

p a[0]  #=> "asdff"

整合写在一行,就是

p "asdff,adf,sdf".split(/,/)[0] #=> "asdff"

以下引用苏菲娅于2008-11-2 14:41:53的发言:

那接下来是不是这样?
p "asdff,adf,sdf".split(/,/)[1] #=> "adf"
p "asdff,adf,sdf".split(/,/)[2] #=> "sdf"
我不懂脚本,现学现卖的...楼主无视我...


恩恩,完全正确。{/qiang}

[LINE]1,#dddddd[/LINE]

忘记说了, split(/,/)  的意思是 遇到 , 就把字符串分割。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: dbshy    时间: 2008-11-2 22:56
我今天上午就回答过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", "", "", ""]


作者: 做游戏的新手    时间: 2008-11-2 23:20
LS太难了。。。。。。。。{/gg}
我看不懂
作者: 亿万星辰    时间: 2008-11-3 00:15
字符串.split("分割符")
以分割符为落刀口,将字符串剁成若干个子字符串构成的数组。

这样解释会不会好懂些呢……{/pz}
作者: MPlayer    时间: 2008-11-3 00:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2008-11-3 00:27
以下引用MPlayer于2008-11-2 16:23:05的发言:
亿老前辈...当时我正是在研究您的'增加装备栏'的脚本..

你可以用p命令看一下拆开以后的每段各是什么,相信很容易就可以搞明白split是做什么用的了。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1