Как удалить ведущий символ из строки в smalltalk

Итак, у меня есть строка в светлом разговоре, строка встречается через соединение 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 как мне убрать 1-й символ в строке в smalltalk для visualworks 2.5 (да, я знаю, что это древний)

3 ответа

Решение

Вы могли бы попробовать

myString allButFirst

(что, кстати, будет работать на любой коллекции)

В обычных VisualWorks вы должны использовать #allButFirst: (работает так же, как связанные методы: #allButLast:, #first: и #last:). Это все вспомогательные методы вокруг #copyFrom:to:.

Если эти методы еще не существуют в версии 2.5, я рекомендую вам просто портировать их, потому что они значительно облегчают жизнь. Они реализованы в SequencableCollection и, следовательно, применяются к гораздо большему количеству классов, чем просто к строкам.

Если вы не хотите их портировать, просто придерживайтесь #copyFrom:to:

Вы также можете использовать другой подход.

newMsg := tmpMsg copyWithout: $$.

Это копирует строку, но исключает все символы $ во время копирования. Он не делает то, что вы просили, но делает то, что вы хотите. Этот метод будет работать в VisualWorks 2.5.

Другие вопросы по тегам