吱吱叫的Smalltalk中的拆分功能

split function in squeak Smalltalk

我目前正在使用 squeak-Smalltalk 进行练习。 我想拆分一个字符串,它的行为有点像 Java 或 python 中的拆分函数,但在互联网上几乎找不到任何东西。有什么建议吗?我该如何实施?

谢谢!

很遗憾没有,squeak中好像没有splitsplitBy:消息(不像Pharo...)所以我自己实现了这样的方法。

split: aSentence
|count str strArr |
    str := aSentence.
    count := ((aSentence select: [:a | a = $ ])) size.
    strArr := OrderedCollection new.
    [count >= 0]
    whileTrue: [
        strArr add: (str copyFrom: 1 to: (str indexOf: $ ifAbsent: [str size + 1]) - 1).
        str := str copyFrom: ((str indexOf: $ ) + 1) to: (str size).
        count := count - 1.
    ].
^strArr

我发现协议浏览器对回答这个问题最有帮助。以下是您可以尝试的一些选择器:

'foo, bar, baz' splitBy: ','. "#('foo' ' bar' ' baz')"
'foo, bar, baz' splitBy: ', '. "#('foo' 'bar' 'baz')"
'foo, bar, baz' findTokens: ', '. "an OrderedCollection('foo' 'bar' 'baz')"

但请注意,虽然 #splitBy:[Do:] 将参数解释为单个分隔符序列,但 #findTokens: 将其用作一组单个字符分隔符:

'foo bar, baz' splitBy: ', '. #('foo bar' ' baz')
'foo bar, baz' findTokens: ', '. an OrderedCollection('foo' 'bar' 'baz')

希望这对您有所帮助。享受你的 Squeak!

SequenceableCollection >> splitBy: 至少从 2010 年 2 月开始就存在于 Squeak 图像中:

('1920x1080' splitBy: 'x') = #('1920' '1080')