1

所以我在闲聊中有一个字符串,该字符串通过 TCP/IP 连接作为“$100xxxxxxZZ”,其中 x 是数字 0-9 或字母 A - Z,ZZ 是发送方计算的校验和。使用该字符串,我需要计算“100xxxxxx”的校验和,以验证这是正确的味精和校验和。所以我需要能够从 '$100xxxxxxZZ' 中删除 '$' 和 'ZZ'

我已经知道如何截断“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 如何在 Visualworks 2.5 的 smalltalk 中删除字符串中的第一个字符(是的,我知道这是古老的)

4

3 回答 3

5

你可以试试

myString allButFirst

(顺便说一句,它适用于任何集合)

于 2014-04-07T20:52:48.413 回答
3

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

如果这些方法在 2.5 中尚不存在,我鼓励您简单地移植它们,因为它们使生活更轻松。它们在 SequuncableCollection 中实现,因此适用于更多的类,而不仅仅是字符串。

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

于 2014-04-08T06:26:55.830 回答
2

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

newMsg := tmpMsg copyWithout: $$.

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

于 2014-04-12T11:12:05.157 回答