本文介绍了如何分割在斯威夫特新行字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字符串,我从一个文本文件中得到了。

文本文件:

  1号线
2号线
3号线
...

我想将其转换为一个数组,每行一个数组元素。

  [1号线,2号线,3号线,...]

根据文件如何保存,字符串可以采取以下形式之一:


  • 字符串=1号线\\ n线2 \\ n线3 \\ n ...,其中 \\ n 是新行(换行)字符


  • 字符串=1号线\\ r \\ n线2 \\ r \\ n线3 \\ r \\ n ...,其中 \\ - [R 是回车符。


据我了解, \\ n 通常在今天的苹果/ Linux的使用,而 \\ r \\ n 在Windows中使用。

我如何分割在任何线路断线得到一个String数组没有任何空元素?

更新

有几种解决方案,以下工作。在这一点上,我没有任何令人信服的理由来选择一个作为比别人更正确。可能影响选择的一些因素可能是(1)如何雨燕是,(2)它是很长的字符串的速度有多快。可以通过upvoting其中的一个或多个和/或离开的注释提供反馈


解决方案

您可以使用字符串方法 enumerateLines

let sentence = "Line 1\nLine 2\nLine 3\n"
var sentenceLines:[String] = []
sentence.enumerateLines { sentenceLines.append($0.line) }
print(sentenceLines)   // "[Line 1, Line 2, Line 3]"

You can create a read only computed property extension to return an array of lines as follow:

extension String {
    var lines:[String] {
        var result:[String] = []
        enumerateLines{ result.append($0.line) }
        return result
    }
}


let sentence2 = "Line 4\nLine 5\nLine 6\n"
let sentence2Lines = sentence2.lines

print(sentence2Lines)    // ["Line 4", "Line 5", "Line 6"]


let sentence3 = "Line 7\r\nLine 8\r\nLine 9\r\n"
let sentence3Lines = sentence3.lines

print(sentence3Lines)  // "[Line 7, Line 8, Line 9]"

这篇关于如何分割在斯威夫特新行字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 00:30