Как удалить ведущий символ из строки в 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.