【问题标题】:How should I remove all the empty lines from a string我应该如何从字符串中删除所有空行
【发布时间】:2016-03-09 16:56:20
【问题描述】:

我从一个api得到一个字符串值,里面有很多没用的空行:

bla bla bla


bla

bla bla bla

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

bla bla bla
bla
bla bla bla

我该如何继续?

【问题讨论】:

  • 使用这个 [anyString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
  • 使用 swift 它的anyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
  • OP,能否请您提供您为解决问题所做的尝试?
  • 我认为你真的想删除重复的新行?例如\n\n?

标签: ios string swift


【解决方案1】:

编辑/更新:

Swift 5.2 或更高版本

可以使用StringProtocol拆分方法

func split(maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Character) throws -> Bool) rethrows -> [Substring]

并传递一个 Character 属性 isNewline 作为 KeyPath。然后你只需要使用joined(separator: "\n")`再次连接你的字符串:

let string = "bla bla bla\n\n\nbla\nbla bla bla\n"
let lines = string.split(whereSeparator: \.isNewline)
let result = lines.joined(separator: "\n")

print(result)  // "bla bla bla\nbla\nbla bla bla"

或者作为StringProtocol的扩展:

extension StringProtocol {
    var lines: [SubSequence] { split(whereSeparator: \.isNewline) }
    var removingAllExtraNewLines: String { lines.joined(separator: "\n") }
}

string.lines  // ["bla bla bla", "bla", "bla bla bla"]
string.removingAllExtraNewLines  // "bla bla bla\nbla\nbla bla bla"

【讨论】:

  • String 的伟大扩展! extension String { func removeMoreThanOneEndOfLines () -> String { var linesArray: [String] = [] self.enumerateLines { line, _ inlinesArray.append(line) } returnlinesArray.filter{!$0.isEmpty}.joined(separator: "\n") } }
  • @abanet 你应该扩展 StringProtocol 而不是 String,因为 Swift 4 也支持子字符串
【解决方案2】:

这是一个简单的方法:

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

【讨论】:

  • 优雅的一站式解决方案
【解决方案3】:

Swift 5.1 一行版本

这会删除所有多余的(文本末尾的)和中间空格。

    let extraSpaceRemoveText = text.trimmingCharacters(in: .whitespacesAndNewlines).components(separatedBy: .newlines).filter{!$0.isEmpty}.joined(separator: "\n")

【讨论】:

    【解决方案4】:

    MuhammadRaheelMateen 和 AtheistP3ace 的建议朝着正确的方向发展,但 whitespaceCharacterSet‌ 也会删除单词之间的空格。你应该只删除newlineCharacterSet

    但即便如此,“修剪”也只会删除末尾的空格;正如 Suthan 所说,您只想删除重复的新行。

    尝试将字符串分成由换行符分隔的组件,过滤掉“”,然后用换行符重新加入:

    let string = blaString.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()).filter(){$0 != ""}.joinWithSeparator("\n")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 2018-03-04
      • 2011-08-24
      • 2023-04-08
      • 1970-01-01
      • 2019-11-25
      • 2012-06-04
      相关资源
      最近更新 更多