Swift - iOS: удаление пробелов внутри строки до или после любого специального символа - PullRequest
0 голосов
/ 22 марта 2019

Я должен сделать проверку, чтобы проверить введенный пользователем ответ на заявку. Я хочу удалить пробелы (если есть) слева или до для следующих специальных символов.

  • /
  • ,
  • :
  • ;
  • .

Таким образом, конечный результат должен быть таким:

Пример:

Правильный ответ => a / b

Ответы должны быть приняты => «a / b», «a / b», «a / b», «a / b», «a / b»

Я могу сделать это используя функцию replaceOccurferences, заменив все возможные значения Есть ли лучшее решение для этого?

Ответы [ 3 ]

4 голосов
/ 22 марта 2019

Удалить до и после пробела специального символа, используя Range -

    let specialChars = ["/",":", ",", ";", "-", "."]
    let aString = " AB / CD EF ; G : H , MN O - P"
    var trimmedString = aString.trimmingCharacters(in: .whitespacesAndNewlines)

    for specialChar in specialChars {

        if let beforeSpacerange = trimmedString.range(of: " \(specialChar)") {
            trimmedString.replaceSubrange(beforeSpacerange, with: specialChar)
        }
        if let afterSpacerange = trimmedString.range(of: "\(specialChar) ") {
            trimmedString.replaceSubrange(afterSpacerange, with: specialChar)
        }

    }

    debugPrint(trimmedString)

Надеюсь, это поможет вам. Дайте мне знать, если у вас все еще есть проблемы.

Удачного кодирования.

2 голосов
/ 22 марта 2019

Вы можете использовать регулярное выражение для замены строки в формате [ ]+{special_char} и {special_char}[ ]+.

Правка

Обновление "." до "\\."

Спасибо ielyamani

Например

func acceptedAnswer(of answer: String) -> String {
    let specialChars = ["/", ":", ",", ";", "-", "\\."]
    var newAnswer = answer.trimmingCharacters(in: .whitespacesAndNewlines)
    for specialChar in specialChars {
        let beforeCharRegex = "[ ]+" + specialChar
        let afterCharRegex = specialChar + "[ ]+"
        newAnswer = newAnswer.replacingOccurrences(of: beforeCharRegex, with: specialChar, options: .regularExpression, range: nil)
        newAnswer = newAnswer.replacingOccurrences(of: afterCharRegex, with: specialChar, options: .regularExpression, range: nil)
    }
    return newAnswer
}

print(acceptedAnswer(of: " apple /   orange     : banana    "))
// apple/orange:banana
0 голосов
/ 22 марта 2019

Вы можете использовать replacingOccurrences, который заменит ваш символ пробелами только на этот символ.Для этого вы можете использовать рекурсивный метод

func removed(in text: String) -> String {
    let symbols = ["/", ",", ":", ";", "-", "."]
    var newText = text
    symbols.forEach { newText = replaced(in: newText, for: $0) }
    return newText
}

func replaced(in text: String, for symbol: String) -> String {
    var newText = text
    let left = " \(symbol)"
    newText = newText.replacingOccurrences(of: left, with: symbol)
    let right = "\(symbol) "
    newText = newText.replacingOccurrences(of: right, with: symbol)
    return newText != text ? replaced(in: newText, for: symbol) : newText
}

Использование:

let string = "Apple / Orange Swift    .   ObjC Moon  : Sun USA - UK"
print(removed(in: string))
Apple/Orange Swift.ObjC Moon:Sun USA-UK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...