我试图从字符串中删除反斜杠,但如果我用 print 打印出来,我得到正确的字符串,但如果我用 "po" 打印它,我得到相同的字符串
I'm trying to remove backslash from string but if I print out with print I get the correct string , but if I print it with "po" I get the same string
MyString = "CfegoAsZEM/sP\u{10}\u{10}}"
MyString.replacingOccurrences(of: "\"", with: "")
with print(MyString) 我得到了这个:"CfegoAsZEM/sP"
(这就是我需要的)
使用 po MyString(在调试器上):"CfegoAsZEM/sP\u{10}\u{10}}"
\u{10}
是换行符
也许更好的方法是 trim
字符串,它会删除字符串开头和结尾的所有空格和换行符
let myString = "CfegoAsZEM/sP\u{10}\u{10}"
let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines)
您的字符串不包含反斜杠字符。相反,\u{}
序列是引入 Unicode 字符的转义序列。这就是为什么您不能使用 replacingOccurrences
.
删除它的原因
在这种情况下,正如 Vadian 指出的那样,它是“新行”字符 (0x10)。因为这是一个不可见的“白色 space”字符,所以当您 print
字符串时您看不到它,但是当您使用 po
时您会看到它。调试器向您显示不可打印字符的转义序列。如果 print(MyString.debugDescription)
,您也会看到序列
不幸的是,trimmingCharactersIn
函数似乎没有考虑 Unicode 序列。
我们可以使用filter
函数来检查字符串中的每个字符。如果字符是 ASCII 且值大于 31(32 是 space 字符,ASCII 序列中的第一个“可打印”字符)我们可以包含它。我们还需要确保包含非 ASCII 值,以免去除可打印的 Unicode 字符(例如表情符号或非拉丁字符)。
let MyString = "CfegoAsZEM/sP\u{10}\u{13}$}\u{1F600}".filter { [=10=].asciiValue ?? 32 > 31 }
print(MyString.debugDescription)
print(MyString)
输出
"CfegoAsZEM/sP}"
CfegoAsZEM/sP}
asciiValue
return 是可选的,如果字符不是纯 ASCII,则为 nil
。在这种情况下,我对 return 32 使用了 nil-coalescing 运算符,以便不过滤该字符。
我修改了初始字符串以包含一些可打印的 Unicode 以证明它没有被过滤器删除。
MyString = "CfegoAsZEM/sP\u{10}\u{10}}"
MyString.replacingOccurrences(of: "\"", with: "")
with print(MyString) 我得到了这个:"CfegoAsZEM/sP"
(这就是我需要的)
使用 po MyString(在调试器上):"CfegoAsZEM/sP\u{10}\u{10}}"
\u{10}
是换行符
也许更好的方法是 trim
字符串,它会删除字符串开头和结尾的所有空格和换行符
let myString = "CfegoAsZEM/sP\u{10}\u{10}"
let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines)
您的字符串不包含反斜杠字符。相反,\u{}
序列是引入 Unicode 字符的转义序列。这就是为什么您不能使用 replacingOccurrences
.
在这种情况下,正如 Vadian 指出的那样,它是“新行”字符 (0x10)。因为这是一个不可见的“白色 space”字符,所以当您 print
字符串时您看不到它,但是当您使用 po
时您会看到它。调试器向您显示不可打印字符的转义序列。如果 print(MyString.debugDescription)
不幸的是,trimmingCharactersIn
函数似乎没有考虑 Unicode 序列。
我们可以使用filter
函数来检查字符串中的每个字符。如果字符是 ASCII 且值大于 31(32 是 space 字符,ASCII 序列中的第一个“可打印”字符)我们可以包含它。我们还需要确保包含非 ASCII 值,以免去除可打印的 Unicode 字符(例如表情符号或非拉丁字符)。
let MyString = "CfegoAsZEM/sP\u{10}\u{13}$}\u{1F600}".filter { [=10=].asciiValue ?? 32 > 31 }
print(MyString.debugDescription)
print(MyString)
输出
"CfegoAsZEM/sP}"
CfegoAsZEM/sP}
asciiValue
return 是可选的,如果字符不是纯 ASCII,则为 nil
。在这种情况下,我对 return 32 使用了 nil-coalescing 运算符,以便不过滤该字符。
我修改了初始字符串以包含一些可打印的 Unicode 以证明它没有被过滤器删除。