当我使用init(contentsOfFile :)创建字符串时,为什么还有一个额外的新行字符?

时间:2017-11-11 10:32:22

标签: swift string newline

我尝试读取捆绑包中文件的内容并将其放入字符串变量中。我使用了init(contentsOfFile:)初始值设定项。但是,字符串末尾似乎总是有一个额外的\n字符。

这是一个MCVE:

let string = try! String(contentsOfFile: Bundle.main.path(forResource: "test", ofType: "txt")!)
print(string.debugDescription)

test.txt是这样的:

Hello
World
Bye
World

请注意,我没有在最后插入新行。这可以通过查看行数来证明:

enter image description here

上面的代码产生了这个输出:

"Hello\nWorld\nBye\nWorld\n"

请注意,最后一个字符为\n

这给我带来了很多麻烦。我使用\n作为分隔符拆分字符串,然后解析每一行。最后的\n会导致空字符串位于拆分字符串中。我不希望这样。

我想我可以调用dropLast删除最后一个字符,但是我不确定当我这样做时,新行字符是否总是出现在最后我找不到任何文件。如果最后没有添加额外的新行字符,那么我的dropLast调用将错误地删除“有用”字符。

为什么要添加新行?这总是会发生吗?

1 个答案:

答案 0 :(得分:4)

这是Xcode的行为。 要对此进行测试,您可以通过右键单击文件选择

来查看包含换行符的文件

Open As - >六角

如果不希望出现这种情况,您可以在终端中使用vim并禁用添加:

VIM Disable Automatic Newline At End Of File