我对这里发生的事情感到困惑。这应该很简单。我正在检查换行符的第一个索引,但它返回nil。我已经在调试器中检查了字符串,它在字符串的末尾有\r\n
。rfidstring = {String} "900083000020758\r\n"
if rfidstring.firstIndex(of: "\n") != nil {
print("rfid string has \\n")
}
我是不是犯了什么愚蠢的错误而完全错过了?当我调用contains(“\n”)时,它可以正常工作并返回true。所以当我调用contains()
时,它知道字符串中有一个\n
,但当我调用firstIndex(of:)
时,它不认为有一个?
// but ...
rfidstring.contains("\n") // returns true
当我从RFID读取器读取数据时,我从输入流接收数据,读取器每行发送一个RFID。因此,为了确保我已经读取了整个rfid(有时它会以两个数据块的形式发送),我需要读取到行尾。这就是为什么我试图找到新的一行。
更新:这对我来说很奇怪:
rfidstring.firstIndex(of: "\r\n") // returns valid index: 15[utf8]
rfidstring.firstIndex(of: "\r") // returns nil
rfidstring.firstIndex(of: "\n") // returns nil
1条答案
按热度按时间ztigrdn81#
看这个问题:Difference between \n and \r?。
TL;DR:
\r\n
是Windows上的换行符,由于Swift字符串以人类感知的方式计算字符,而不是以单个字节计算,因此您需要搜索组合字符。或者任何使用 predicate 的换行符:rfidstring.firstIndex(where: \.isNewline)