2

使用 Rebol 如何将此字符串拆分为字符(不使用带循环的类似 c 的方法)?我正在使用没有该split方法的版本 2.7.8.2.5。

str: "今天是星期一"

我想将以上内容拆分为:

[ '今天是星期一']

Parse方法似乎只是将一个句子分成组成词。

谢谢你。

4

3 回答 3

4

如果你不想使用循环,有一个绝妙的技巧:

>> head extract/into str 1 []  
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]

OTOH,string!已经是一系列char!值,因此将其分解为这样的字符并没有提供任何明显的好处。

于 2019-07-10T18:58:17.580 回答
3

在某些 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"]

我会给你一个,让其他人列出无限的更快的方法。:-)

于 2019-07-10T15:49:02.617 回答
0

根据您是否想获得长度为 1 的单个字符或字符串,您也可以使用 parse 并遵循以下规则

>> 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"]
于 2019-07-11T06:15:44.597 回答