在smalltalk中如何将字符串拆分为单个字符?

在smalltalk中如何将字符串拆分为单个字符?,smalltalk,Smalltalk,我有一个字符串,看起来像:“1 3 4 5 7 8” 我将如何迭代它以将其拆分为一个字符,以便对每个字符执行一个函数 因此,我的代码如下所示: | tempSet1Values tempSet2Values setConcat | tempSet1Values := '1 2 3'. tempSet2Values := '4 5 6'. setConcat := tempSet1Values , ' ' , tempSet2Values 我想分离setConcat中的每个数字,并将每个数字一次

我有一个字符串,看起来像:“1 3 4 5 7 8”

我将如何迭代它以将其拆分为一个字符,以便对每个字符执行一个函数

因此,我的代码如下所示:

| tempSet1Values tempSet2Values setConcat |
tempSet1Values := '1 2 3'.
tempSet2Values := '4 5 6'.
setConcat := tempSet1Values , ' ' , tempSet2Values
我想分离setConcat中的每个数字,并将每个数字一次添加到另一个方法中。抱歉,如果我帮不了你,我是Smalltalk新手。


一个明显的可能性是编写一个循环,逐步遍历字符串的字符

|input |
1 to: input size do:
    [ :index |
        "here `input at: index` is the current character of the string"
    ]

不过还有很多可能性。

大多数Smalltalk都支持
#findTokens:
字符串上的
消息:

'1 2 3' findTokens: ' '. "-> anOrderedCollection('1', '2', '3')"
其中参数也可以是字符串中的多个分隔符,如
,;:'

根据方言,可能是
#findTokens:
不接受
字符串,而是接受
字符

'1 2 3' findTokens: $ . "note the space" "-> anOrderedCollection('1', '2', '3')
此外,您可能希望在连接之前进行拆分:

 | tempSetValues1 tempSetValues2 |
 tempSetValues1 := '1 2 3'.
 tempSetValues2 := '3 4 5'.
 (tempSetValues1 findTokens: ' '), (tempSetValues2 findTokens: ' ').
这可以概括为单个输入字符串的数量变大

'1 3 4 5 7 8'
inject: ''
into: [:str :each |
    (each sameAs: Character space)
        ifFalse: [
            Transcript show: each; cr ]].

这将每次输出一个字符的字符串。使用转录本窗口(菜单->工具->转录本)进行测试。用您选择的方法替换通话记录。

谢谢您的回复!那么这会被空间分开吗?我试着做了一个do块,但没有成功。我的Smalltalk有点生锈,但在我看来它应该会改变
你好,你好,你,今天
你好。你好。你今天
。也就是说,使用
作为分隔符,分成子字符串,然后将片段放回一起,用
代替.hmmm…但是如果我想让字符串保持分离,我还会使用数组折叠吗?看起来应该是
tempSet2Values:='4 5 6'
很抱歉。我的错误
'1 3 4 5 7 8'
inject: ''
into: [:str :each |
    (each sameAs: Character space)
        ifFalse: [
            Transcript show: each; cr ]].