Убрать лидирующие символы и ноль в swift - PullRequest
0 голосов
/ 10 сентября 2018

Я попытался удалить некоторые символы из string в Swift 4, говорит: у меня есть

QC00012345, возврат 12345

QC00009876, возврат 9876

QC12345678, возврат 12345678

удаление первых двух символов и начальных нулей.

Я посмотрел здесь, люди просто используют dropFirst, а затем конвертируют String в Int, затем преобразовать его обратно в String.

Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы можете просто использовать drop(while:):

let test = "QC00012345"
let num = test.dropFirst(2).drop { $0 == "0"}

Вы также можете создать ClosedRange<String> и использовать его в качестве предиката, если не хотите отбрасывать первые два символа вручную:

let num = test.drop { !("1"..."9" ~= $0) }
print(num)   //  12345

или проверьте, не содержит ли строка от 1 до 9 символ:

let num = test.drop { !"123456789".contains($0) }

редактирование / обновление:

Swift 5 или более поздняя версия

Использование свойства Character isWholeNumber

let num = test.drop { !$0.isWholeNumber || $0 == "0" }
0 голосов
/ 10 сентября 2018

Вы можете использовать регулярное выражение и dropFirst:

let str = "QC00009876"
let clean = str.dropFirst(2).replacingOccurrences(of: "^0*", with: "", options: .regularExpression)

Выражение ^0* означает «ноль или более 0 символов в начале строки».

Или только с помощью регулярного выражения:

let str = "QC00009876"
let clean = str.replacingOccurrences(of: "^..0*", with: "", options: .regularExpression)

Выражение ^..0* означает «любые два символа, за которыми следует ноль или более 0 символов в начале строки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...