Rebol:如何将字符串拆分为字符
Rebol: how to split a string into characters
如何使用 Rebol 将此字符串拆分为字符(不使用带有循环的类似 C 的方法)?我正在使用没有 split
方法的 2.7.8.2.5 版本。
海峡:"Today is Monday"
我想把上面的拆分成:
[ 'T' 'o' 'd' 'a' 'y' ' ' 'i' 's' ' ' 'M' 'o' 'n' 'd' 'a' 'y']
Parse
方法好像只是把一个句子拆分成组成词。
谢谢。
在某些 Rebols(不是 Rebol2)中,您可以使用 MAP-EACH 来执行此操作,例如map-each ch str [ch].
在 Rebol2 中,COLLECT 和 KEEP 是相当通用且强大的构建块的方法:
>> collect [foreach c str [keep c]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
我会给你一个,让其他人列出无穷无尽的更快的方法。 :-)
如果您不想使用循环,可以使用一个绝妙的技巧:
>> head extract/into str 1 []
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
OTOH,string!
已经是一系列 char!
值,因此将其分解成这样的字符并没有提供任何明显的好处。
取决于您是想获取长度为 1 的单个字符还是字符串,您也可以使用以下规则进行解析
>> str: "Today is Monday"
== "Today is Monday"
>> collect [parse/all str [some [copy x skip (keep x) ] ]]
== ["T" "o" "d" "a" "y" " " "i" "s" " " "M" "o" "n" "d" "a" "y"]
>> collect [parse/all str [some [x: skip (keep x/1)]]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
红色允许更紧的版本
>> parse str [collect [some [keep skip]]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
如何使用 Rebol 将此字符串拆分为字符(不使用带有循环的类似 C 的方法)?我正在使用没有 split
方法的 2.7.8.2.5 版本。
海峡:"Today is Monday"
我想把上面的拆分成:
[ 'T' 'o' 'd' 'a' 'y' ' ' 'i' 's' ' ' 'M' 'o' 'n' 'd' 'a' 'y']
Parse
方法好像只是把一个句子拆分成组成词。
谢谢。
在某些 Rebols(不是 Rebol2)中,您可以使用 MAP-EACH 来执行此操作,例如map-each ch str [ch].
在 Rebol2 中,COLLECT 和 KEEP 是相当通用且强大的构建块的方法:
>> collect [foreach c str [keep c]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
我会给你一个,让其他人列出无穷无尽的更快的方法。 :-)
如果您不想使用循环,可以使用一个绝妙的技巧:
>> head extract/into str 1 []
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
OTOH,string!
已经是一系列 char!
值,因此将其分解成这样的字符并没有提供任何明显的好处。
取决于您是想获取长度为 1 的单个字符还是字符串,您也可以使用以下规则进行解析
>> str: "Today is Monday"
== "Today is Monday"
>> collect [parse/all str [some [copy x skip (keep x) ] ]]
== ["T" "o" "d" "a" "y" " " "i" "s" " " "M" "o" "n" "d" "a" "y"]
>> collect [parse/all str [some [x: skip (keep x/1)]]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
红色允许更紧的版本
>> parse str [collect [some [keep skip]]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]