我試圖讀取我的包中文件的內容並將其放入一個字符串變量中。我使用了init(contentsOfFile:)
初始值設定項。但是,在字符串的末尾似乎總是有一個額外的\n
字符。當我使用init(contentsOfFile :)創建一個字符串時,爲什麼會有額外的新行字符?
這裏是一個MCVE:
let string = try! String(contentsOfFile: Bundle.main.path(forResource: "test", ofType: "txt")!)
print(string.debugDescription)
test.txt
是這樣的:
Hello
World
Bye
World
請注意,我並沒有在結尾處一個新行。這可以通過查看線數可以證明:
上面的代碼產生這樣的輸出:
"Hello\nWorld\nBye\nWorld\n"
注意的最後一個字符是一個\n
。
這對我造成了很多麻煩。我使用\n
作爲分隔符來分割字符串,然後解析每一行。最後的\n
會導致空字符串位於拆分字符串中。我不想那樣。
我想我可以叫dropLast
刪除最後一個字符,但我不知道是否有新行字符將總是也會出現在最後當我這樣做,因爲我無法找到任何文件。如果碰巧一個額外的新行字符未添加到最後,則我的dropLast
調用將錯誤地刪除「有用」字符。
爲什麼要添加新行?這是否總是發生?
最後的'\ n'字符是否來自'print'本身?嘗試在最後添加一個新的行字符,並查看打印是否在最後生成兩個'\ n'。也可以嘗試'let hasEol = string.last!==「\ n」'看看你回來了什麼。 – dasblinkenlight
@dasblinkenlight我在文件末尾添加了一個新行,但打印輸出仍然是'「Hello \ nWorld \ nBye \ nWorld \ n」'。這看起來像只在文件中沒有新行時纔會添加新行......'string.last!==「\ n」'爲true。 – Sweeper
最後必須有一個額外的'\ n'。右鍵單擊>打開爲>十六進制查看十六進制表示。我想這是在編輯器中保存文件時Xcode的一個*壞*行爲。使用外部編輯器打開文件並刪除換行符。 – vadian