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