У меня есть вопрос.
Есть несколько способов разделить строку на массив строк.
Прежде всего, способ, которым я превратил строку в массив строк, таков:
let str = "F'2R'UU2"
let strArr: [String] = str.map { String($0) }
//strArr => ["F", "'", "2", "R", "'", "U", "U", "2"]
Он превращается в массив строк, подобный этому
Но я хотел бы разделить на основе верхнего регистра алфавита. Например, если вы разделите строку F2
, она станет ["F2"]
вместо ["F", "2"]
, а если вы разделите строку F'2
, она станет ["F", "'", "2"]
вместо ["F'2"]
.
Результат, который я хочу,
let str = "F'2R'UU2"
<<<str to strArr>>>
//strArr => ["F'2", "R'", "U", "U2"]
Пожалуйста, дайте мне знать!
Да все верно. Помоги мне
Вы можете использовать reduce
для перебора строки по каждому символу и либо добавить ее в массив, если это заглавная буква, либо добавить ее в последний элемент массива в противном случае.
let str = "F'2R'UU2"
let res = str.reduce(into: [String]()) {
if $1.isUppercase || $0.isEmpty {
$0.append("\($1)")
} else {
$0[$0.count - 1] = $0.last! + "\($1)"
}
}
@JoakimDanielson, почему бы и просто $0[$0.count-1].append($1)
. Один вкладыш $1.isUppercase || $0.isEmpty ? $0.append(String($1)) : $0[$0.count-1].append($1)
Неясно. Вы хотите, чтобы каждый элемент массива был первой буквой + все последующие небуквы в исходном тексте?