我从api得到一个字符串值,并且有很多无用的空行:
bla bla bla
bla
bla bla bla
我想删除这些空行以获得此结果:
bla bla bla
bla
bla bla bla
我该怎么办?
答案 0 :(得分:10)
编辑/更新:
Swift 5或更高版本
您可以使用StringProtocol
拆分方法func split(maxSplits:, omittingEmptySubsequences:, whereSeparator:) -> [SubSequence]
并将omittingEmptySubsequences设置为true,并将闭包作为谓词{ $0.isNewline }
传递。然后你只需要使用join(separator:“\ n”)`来再次连接你的字符串:
let string = "bla bla bla\n\n\nbla\nbla bla bla\n"
let lines = string.split { $0.isNewline }
let result = lines.joined(separator: "\n")
print(result) // "bla bla bla\nbla\nbla bla bla"
或作为StringProtocol
的扩展名:
extension StringProtocol {
var lines: [SubSequence] {
return split { $0.isNewline }
}
var removingAllExtraNewLines: String {
return lines.joined(separator: "\n")
}
}
string.lines // ["bla bla bla", "bla", "bla bla bla"]
string.removingAllExtraNewLines // "bla bla bla\nbla\nbla bla bla"
答案 1 :(得分:4)
这是一种简单的方法:
import Foundation
let string = "bla bla bla\n\n\nbla\n\nbla bla bla\n"
var filtered = ""
string.enumerateLines({if !$0.line.isEmpty { filtered.appendContentsOf("\($0.line)\n") }})
print(filtered)
// => bla bla bla
// => bla
// => bla bla bla
另一种不创建可变变量的方法:
let newString = string.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()).filter({!$0.isEmpty}).joinWithSeparator("\n")
答案 2 :(得分:2)
MuhammadRaheelMateen和AtheistP3ace的建议正朝着正确的方向前进,但newlineCharacterSet
也会删除单词之间的空格。您只应删除let string = blaString.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()).filter(){$0 != ""}.joinWithSeparator("\n")
。
但即便如此,“修剪”只会消除末端的空白;正如Suthan所说,你只想删除重复的新行。
尝试将字符串分成由换行符分隔的组件,过滤掉“”,然后重新加入换行符:
{{1}}
答案 3 :(得分:2)
Swift 5.1 1行版本
这会删除所有多余的(在文本末尾)和中间空格。
let extraSpaceRemoveText = text.trimmingCharacters(in: .whitespacesAndNewlines).components(separatedBy: .newlines).filter{!$0.isEmpty}.joined(separator: "\n")