所以我在一个简短的谈话中有一个字符串,字符串遇到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中字符串中的第一个字符(是的,我知道这很古老)
答案 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。