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

时间:2014-02-23 04:49:38

标签: smalltalk

我有一个字符串,如:'1 3 4 5 7 8'

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

所以我的代码看起来像这样:

| tempSet1Values tempSet2Values setConcat |
tempSet1Values := '1 2 3'.
tempSet2Values := '4 5 6'.
setConcat := tempSet1Values , ' ' , tempSet2Values

我想将setConcat中的每个数字分开,并将每个数字一次添加到另一个方法。对不起,如果我没有帮助,我是Smalltalk的新手。

4 个答案:

答案 0 :(得分:1)

This rosetta code sample looks to do what you are looking for

|array |
array := 'Hello,How,Are,You,Today' subStrings: $,.
array fold: [:concatenation :string | concatenation, '.', string ]

答案 1 :(得分:1)

大多数Smalltalks支持#findTokens: s上的String消息:

'1 2 3' findTokens: ' '. "-> anOrderedCollection('1', '2', '3')"

其中参数也可以是字符串中的多个分隔符,如'.,;:'

根据方言的不同,#findTokens:可能 <{1}}而String只有<{1}}:

Character

另外,您可能希望在连接之前进行拆分:

'1 2 3' findTokens: $ . "note the space" "-> anOrderedCollection('1', '2', '3')

这可以推广为单个输入字符串的数量变大。

答案 2 :(得分:0)

一个明显的可能性就是编写一个循环遍历字符串字符的循环。

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

但是还有更多的可能性。

答案 3 :(得分:0)

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

一次输出一个字符串。使用成绩单窗口(菜单 - &gt;工具 - &gt;成绩单)进行测试。用您选择的方法替换成绩单调用。