0

我在新行将字符串拆分为数组。文本来自服务器,可以在多个平台上创建。Unix 文本没有问题,但是由于新的行定义问题(\n\r 与 \n),如果文本是从基于 Windows 的服务器发送的,则不会拆分文本。

我正在使用它来查找新行的正则表达式并将其替换为 \n:

let stringRev = self.string.stringByReplacingOccurrencesOfString( "(\r\n|\r|\n)", withString: "\n", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

let myArray = stringRev.componentsSeparatedByString("\n")

有没有办法在 Swift 中做到这一点?

非常感谢!

4

1 回答 1

4

您可以使用 String 方法 enumerateLines:

let input = "Line 1\r\nLine 2\r\nLine3"
var result:[String] = []
input.enumerateLines { (line, _) -> () in
    result.append(line)
}

print(result)  // "["Line 1", "Line 2", "Line3"]\n

您还可以使用 componentsSeparatedByCharactersInSet 并使用 NSCharacterSet.newlineCharacterSet() 来分解您的线条

let input = "Line 1\rLine 2\rLine3"
let linesArray =  input.componentsSeparatedByCharactersInSet(.newlineCharacterSet())

linesArray  // ["Line 1", "Line 2", "Line3"]

如果您打算在代码中的其他地方使用它,您可以创建一个扩展:

extension String {
    var linesArray:[String] {
        var result:[String] = []
        enumerateLines { (line, _) -> () in
            result.append(line)
        }
        return result
    }
    var lines: [String] {
        return componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
    }
}

let input = "Line 1\nLine 2\nLine3"
let allLinesSample = input.linesArray  // ["Line 1", "Line 2", "Line3"]

let input2 = "Line 1\r\nLine 2\r\nLine3"
let allLinesSample2 = input2.linesArray  // ["Line 1", "Line 2", "Line3"]

let input3 = "Line 1\rLine 2\rLine3"
let allLinesSample3 = input3.lines  // ["Line 1", "Line 2", "Line3"]
于 2015-10-22T23:10:21.083 回答