Как удалить пробел перед концом строки в Swift - PullRequest
0 голосов
/ 06 мая 2020

У меня есть String с двумя пробелами, и я хотел бы удалить только последний пробел в String, а также удалить последний текст. components(separatedBy: " ") тест на разбиение, где есть место, которое я не хочу делать.

Текущий текст

let teamName = "Aston Villa -1"

Я бы хотел, чтобы это было так

teamName = "Aston Villa"

Ответы [ 4 ]

2 голосов
/ 06 мая 2020

Это решение с регулярным выражением.

let teamName = "Aston Villa -1"
let trimmedTeamName = teamName.replacingOccurrences(of: "(?:\\s[^\\s]+)$", with: "", options: .regularExpression)

Шаблон ищет в обратном направлении (?:) пробельный символ (\\s), за которым следует 1 или несколько непробельных символов ([^\\s]+) в конце строки ($)


В качестве альтернативы вы можете использовать range(of с опцией .backwards

if let rangeOfLastWhiteSpace = teamName.range(of: " ", options: .backwards) {
    let trimmedTeamName = String(teamName[..<rangeOfLastWhiteSpace.lowerBound])
}
0 голосов
/ 06 мая 2020
let kutcer = "Aston Villa -1"
kutcer.lastIndex(of: " ").map( kutcer.prefix(upTo:) ) == "Aston Villa" // true

… и если он вам нужен как необязательный String:

kutcer
.lastIndex(of: " ")
.map( kutcer.prefix(upTo:) )
.map(String.init)
?? kutcer
0 голосов
/ 06 мая 2020

Разделить строку на массив ["Aston", "Villa", "-1"]. Отбросьте последний элемент массива: ["Aston", "Villa"]. Снова объедините массив "Aston Villa".

let fixedTeamName = teamName.split(separator: " ")
    .dropLast()
    .joined(separator: " ")

0 голосов
/ 06 мая 2020

Это должно работать, также для названий команд из одного слова.

var teamName = "Aston Villa -1"

var foundSpace = false

while foundSpace == false {
    if teamName.removeLast() == " " {
        foundSpace = true
    }
}

print(teamName) //  "Aston Villa"
...