Swift:在新行将字符串拆分为数组 - 基于 Windows 的文本
Swift: Split string into array at new line - Windows-based text
我在换行处将字符串拆分为数组。文本来自服务器,可以在多个平台上创建。 Unix 文本没有问题,但是由于新行定义问题(\n\r vs \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有没有办法做到这一点?
非常感谢!
您可以使用字符串方法 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"]
我在换行处将字符串拆分为数组。文本来自服务器,可以在多个平台上创建。 Unix 文本没有问题,但是由于新行定义问题(\n\r vs \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有没有办法做到这一点?
非常感谢!
您可以使用字符串方法 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"]