我正在创建一个应用程序,其中我的级别存储为文本文件中的数字网格,当读取它们时,我会在没有的时候获得尾随换行符。正在读入的文本文件的内容如下(注意没有尾随换行符,最后一行刚刚结束)。忽略刻度标记,它们是为了清晰标记文件内容的开头和结尾。
'1 1 0 0
1 0 0 0
0 0 0 0
0 0 0 0'
我的代码:
let mypath = Bundle.main.path(forResource:"level1", ofType:nil)!
let content = try! String(contentsOfFile:mypath)
let lines:[String] = content.components(separatedBy:"\n")
print("lines=\(lines)")
print("content = '\(content)'")
输出:
lines=["1 1 0 0", "1 0 0 0", "0 0 0 0", "0 0 0 0", ""]
content = '1 1 0 0
1 0 0 0
0 0 0 0
0 0 0 0
'
正如你所看到的,有第五个数组元素,暗示文件中只有四个“\ n”字符串,只有三个。此外,内容的价值最后还有一个额外的换行符。
现在,如果我在文件中添加一个尾随换行符,使文件内容为(刻度线之间的所有内容):
'1 1 0 0
1 0 0 0
0 0 0 0
0 0 0 0
'
输出变为:
lines=["1 1 0 0", "1 0 0 0", "0 0 0 0", "0 0 0 0", ""]
content = '1 1 0 0
1 0 0 0
0 0 0 0
0 0 0 0
'
与以前完全相同!
如果我添加两个尾随换行符,则输出会占用它,变为
lines=["1 1 0 0", "1 0 0 0", "0 0 0 0", "0 0 0 0", "", ""]
content = '1 1 0 0
1 0 0 0
0 0 0 0
0 0 0 0
'
这是为什么?这是一个错误吗?有什么方法可以关闭这个“功能”吗?我需要计算行数,这就是抛弃一切。我知道我可以删除所有额外的换行符,但这似乎是一个避免问题的补丁,而不是解决问题本身。