这可能是一个愚蠢的问题,但我是新手迅速,我实际上无法弄清楚这一点.
我有API将url作为字符串" http:\ /\/ xxx "返回.我不知道如何以这种格式存储从API返回的URL.由于反斜杠,我无法将其存储到变量中.
来自apple doc:
...字符串不能包含未转义的反斜杠(\),...
有没有办法如何存储这样的字符串或如何删除这些单反斜杠或如何使用它?
谢谢你的建议.
您可以只替换那些反斜杠,例如:
let string2 = string1.stringByReplacingOccurrencesOfString("\\", withString: "")
但是,如果可能的话,你真的应该修复返回那些反斜杠的API,因为这显然是不正确的.该代码的作者显然错误地认为必须转发正斜杠,但事实并非如此.
最后,API应该被修复为不插入这些反斜杠,但在解决之前,您可以使用上面的方法来删除可能出现的任何反斜杠.
在下面评论的讨论中,关于字符串中的反斜杠似乎存在巨大的混淆.那么,让我们退一步讨论"字符串文字".正如文档所说,字符串文字是:
您可以
String
在代码中包含预定义值作为字符串文字.字符串文字是由一对双引号(""
)包围的固定文本字符序列.
请注意,字符串文字只是代码中特定固定字符序列的表示.但是,这不应该与底层String
对象本身混淆.字符串文字与基础String
对象之间的主要区别在于字符串文字允许使用反斜杠作为"转义"字符,在表示特殊字符(或进行字符串插值)时使用.正如文件所说:
字符串文字可以包含以下特殊字符:
转义的特殊字符
\0
(空字符),\\
(反斜杠),\t
(水平制表符),\n
(换行符),\r
(回车),\"
(双引号)和\'
(单引号)任意Unicode标量,写为
\u{n}
,其中n
是1-8位十六进制数,其值等于有效的Unicode代码点
所以,你是正确的,在字符串文字中,正如你上面引用的摘录所指出的,你不能有一个未转义的反斜杠.因此,只要您想在字符串文字中表示单个反斜杠,就可以用a表示\\
.
因此,上述stringByReplacingOccurrencesOfString
意思是"查看string1
,查找所有出现的单个反斜杠,并用空字符串替换它们(即删除反斜杠)."
考虑:
let string1 = "foo\\bar" print(string1) // this will print "foo\bar" print(string1.characters.count) // this will print "7", not "8" let string2 = string1.stringByReplacingOccurrencesOfString("\\", withString: "") print(string2) // this will print "foobar" print(string2.characters.count) // this will print "6"
有点令人困惑的是,如果你在string1
"Debug"面板的"Variables"视图中或在playground中查看,它将显示一个字符串文字表示(即反斜杠将显示为"\\"
).但不要混淆.当您\\
在字符串文字中看到时,实际字符串中实际上只有一个反斜杠.但是如果您print
是值或查看实际字符,则字符串中只有一个反斜杠本身.
简而言之,不要将字符串文字中的反斜杠转义(例如,参数to stringByReplacingOccurrencesOfString
)与底层字符串中存在的单个反斜杠混淆.