1

我正在尝试完成这些教程: http: //live.exept.de/doc/online/english/overview/basicClasses/streams.html

但我无法让某些方法起作用(例如,nextAlphaNumericWord)。2.0/3.0 中是否存在这个或类似的东西?


我有这点工作得体:

[ tmpStream atEnd ] whileFalse: [ myStream nextPutAll: (tmpStream nextDelimited: Character space); nextPut: $ ].

这不考虑以下情况:( 'one _ _ _ two _ _ three _ four _ _ '空格)

我也试过:

    |tmpStream|
myStream := ReadWriteStream on: String new.
tmpStream := ReadStream on: inString.

[ tmpStream atEnd ] whileFalse: [ tmpStream next == $
                                    ifFalse: [ myStream nextPutAll: 
                                        (tmpStream nextDelimited: $ ); 
                                        nextPut: $
                                    ].

但这只是砍掉每个单词的第一个字母。有什么建议么?

4

1 回答 1

4

你真的需要那个旧的 Smalltalk/X 版本吗?当前的 Smalltalk/X 版本是 6.2.x,并且在 PeekableStream 和 ReadStream 类中包含 #nextAlphaNumericWord 方法。但是,我强烈建议您升级到最新的 Smalltalk/X 版本,以便您享受更好的功能。

如果您要移植到 Pharo 2.0 或 3.0,那么您有多种选择来实现该方法,但本教程的接近方法是:

|string stream word1 word2 num1 num2 num3|

string := 'one two 12345 567.678'.
stream := string readStream.

word1 := stream nextDelimited: Character space.
stream skipSeparators.
word2  := stream upToAnyOf: Character separators.
num1   := Number readFrom: stream.
...
于 2013-06-18T04:22:58.063 回答