我应该如何从字符串中删除所有空行

时间:2016-03-09 16:56:20

标签: ios string swift

我从api得到一个字符串值,并且有很多无用的空行:

bla bla bla


bla

bla bla bla

我想删除这些空行以获得此结果:

bla bla bla
bla
bla bla bla

我该怎么办?

4 个答案:

答案 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")