Swift,从文件txt中分离字符串

标签 swift string unicode-escapes

我有这个文件文本

enter image description here

我想把它放在 [[String]] 中,以便像这样:

[
["Quanto tempo dopo il risveglio fumi la prima sigaretta?", "Entro 5 minuti", "Da 6 a 30 minuti", "Da 31 a 60 minuti", "Dopo 60 minuti"], 
["Ti riesce difficile non fumare nei luoghi dove è vietato?", "Sì", "No"],
["A quale sigaretta della giornata faresti più fatica a rinunciare?", "La prima del mattino", "Una delle successive"],
["Quante sigarette fumi al giorno?", "10 o meno", "Da 11 a 20", "Da 21 a 30", "31 o più"],
["Fumi più durante la prima ora dopo il risveglio che durante il resto della giornata?", "Sì", "No"]
]

所以我这样做了:

let data = try! String(contentsOf: Bundle.main.url(forResource: "questions", withExtension: "txt")!, encoding:
            .utf8)
            .components(separatedBy: "\n")
            .map { $0.components(separatedBy: "\n\n") }
print(data)

但我得到的是这样的 [[String]]:

[
["Quanto tempo dopo il risveglio fumi la prima sigaretta?"],
["Entro 5 minuti"],
["Da 6 a 30 minuti"],
["Da 31 a 60 minuti"],
["Dopo 60 minuti"],
[""],
["Ti riesce difficile non fumare nei luoghi dove è vietato?"],
["Sì"],
["No"],
[""],
["A quale sigaretta della giornata faresti più fatica a rinunciare?"],
["La prima del mattino"],
["Una delle successive"],
[""],
["Quante sigarette fumi al giorno?"],
["10 o meno"],
["Da 11 a 20"],
["Da 21 a 30"],
["31 o più"],
[""],
["Fumi più durante la prima ora dopo il risveglio che durante il resto della giornata?"],
["Sì"],
["No"],
[""]
]

转义序列有问题。

最佳答案

您的分隔符顺序错误。你想要的是 首先将文件内容按段落分隔(使用\n\n),然后将每个段落按行分隔(使用\n):

let text = "line1\nline2\n\nline3\nline4"
let separated = text.components(separatedBy: "\n\n")
    .map { $0.components(separatedBy: "\n") }

print(separated) // [["line1", "line2"], ["line3", "line4"]]

另一种选择是将文件拆分成行数组,然后 然后在空行处拆分数组:

let separated = text.components(separatedBy: "\n")
      .split(separator: "")
      .map(Array.init) // transform slices to proper arrays

关于Swift,从文件txt中分离字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486847/

相关文章:

ios - 我们如何在swift中使用协议(protocol)实现并发线程?

android - Kotlin Android Studio-在字符串中使用HTML标签

C++ plus 运算符不适用于 const char 和其他运算符

java - 如何打印带有缺少反斜杠的unicode字符的字符串?

json - 在 swift 中创建 json 对象 : Consecutive statements on a line must be separated by ';'

objective-c - 滚动时增加 UINavigationBar 标题字体大小

javascript - 开发自己的 "Hash"算法

c# - 如何获得正确的字符串文本?

ios - countDownTimer = 0 的 UIDatePicker 显示 "0 hours 1 min"