如何从smalltalk中的字符串中删除前导字符

时间:2014-04-07 20:28:21

标签: string smalltalk truncation visualworks

所以我在一个简短的谈话中有一个字符串,字符串遇到TCP / IP连接,因为' $ 100xxxxxxZZ'其中x是数字0-9或字母A-Z,ZZ是由发送者计算的校验和。我需要用字符串来计算' 100xxxxxx'的校验和。为了验证这是正确的消息和校验和。所以我需要能够删除' $'和' ZZ'关于' $ 100xxxxxxZZ'

我已经知道如何截断' ZZ'关闭,这是我的代码:

  

ValidateMsg:replyWithCheckSum

|newMsg tempMsg|
"removes the 'ZZ' from '$100xxxxxxZZ'  "
tempMsg := replyWithCheckSum copyFrom: 2 to: (replyWithCheckSum size -2).

"CODE TO REMOVE THE '$' AND STORE INTO newMsg"

"compares the 'ZZ' to the checksum calculated from newMsg"
^(self calcCheckSum: newMsg) = (self getCheckSumFromReply: replyWithCheckSum)

TL; DR如何在visualt 2.5中删除smalltalk中字符串中的第一个字符(是的,我知道这很古老)

3 个答案:

答案 0 :(得分:5)

你可以尝试

myString allButFirst

(顺便说一下,这对任何收藏都有效)

答案 1 :(得分:3)

在普通的VisualWorks中,您将使用#allButFirst :(与相关方法非常相似:#allButLast:,#first:和#last :)。这些都是围绕#copyFrom:to:。

的辅助方法

如果这些方法在2.5中还不存在,我建议你简单地移植它们,因为它们可以让生活变得更轻松。它们在SequencableCollection中实现,因此适用于比Strings更多的类。

如果您不想移植它们,只需坚持使用#copyFrom:to:

答案 2 :(得分:2)

你也可以采取不同的方法。

newMsg := tmpMsg copyWithout: $$.

这会复制字符串,但会在复制过程中排除所有$字符。它没有按照你的要求做,但它可以做你想要的。此方法适用于VisualWorks 2.5。