Ios Swift-删除单个反斜杠
这也许是个愚蠢的问题,但我对斯威夫特还不熟悉,实际上我无法理解 我有一个API,它以字符串“http:\/\/xxx”的形式返回url。我不知道如何以这种格式存储从API返回的URL。由于反斜杠,我无法将其存储到变量 从苹果文档: …字符串不能包含未转换的反斜杠(\) 有没有办法像这样存储字符串,或者如何删除这些反斜杠,或者如何使用这些反斜杠Ios Swift-删除单个反斜杠,ios,swift,backslash,Ios,Swift,Backslash,这也许是个愚蠢的问题,但我对斯威夫特还不熟悉,实际上我无法理解 我有一个API,它以字符串“http:\/\/xxx”的形式返回url。我不知道如何以这种格式存储从API返回的URL。由于反斜杠,我无法将其存储到变量 从苹果文档: …字符串不能包含未转换的反斜杠(\) 有没有办法像这样存储字符串,或者如何删除这些反斜杠,或者如何使用这些反斜杠 感谢您的建议。通过添加额外的反斜杠在字符串中包含反斜杠。您可以替换这些反斜杠,例如: let string2 = string1.stringByRepl
感谢您的建议。通过添加额外的反斜杠在字符串中包含反斜杠。您可以替换这些反斜杠,例如:
let string2 = string1.stringByReplacingOccurrencesOfString("\\", withString: "")
但是,如果可能的话,您真的应该修复返回这些反斜杠的API,因为这显然是不正确的。该代码的作者显然有一个错误的印象,即必须转义前斜杠,但事实并非如此
总之,API应该固定为不插入这些反斜杠,但在修复之前,您可以使用上面的方法删除可能出现的任何反斜杠
在下面评论中的讨论中,对于字符串中的反斜杠似乎存在巨大的混淆。那么,让我们退一步讨论一下“字符串文字”。如上所述,字符串文字是: 您可以将预定义的
String
值作为字符串文字包含在代码中。字符串文字是由一对双引号(“
)包围的文本字符的固定序列
请注意,字符串文字只是代码中特定固定字符序列的表示形式。但是,这不应该与底层的字符串
对象本身混淆。字符串文本和底层string
对象之间的关键区别在于,字符串文本允许使用反斜杠作为“转义”字符,用于表示特殊字符(或执行)。作为:
字符串文字可以包括以下特殊字符:
- 转义的特殊字符
(空字符)、\0
(反斜杠)、\
(水平选项卡)、\t
(换行符)、\n
(回车符)、\r
(双引号)和\”
(单引号)\
- 任意Unicode标量,写为
,其中\u{n}
是一个1-8位的十六进制数,其值等于有效的Unicode码点n
\\
来表示
因此,上面的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
,它将显示字符串文字表示(即反斜杠将显示为“\\”
)。但请不要混淆。当您在字符串文字中看到\\
时,实际字符串中实际上只有一个反斜杠。但是,如果您打印值或查看实际字符,则字符串本身只有一个反斜杠
简而言之,不要将反斜杠转义合并到字符串文字中(例如,stringByReplacingOccurrencesOfString
)的参数和基础字符串中存在的单个反斜杠。请检查以下代码
let jsonStr = "[{\"isSelected\":true,\"languageProficiencies\":[{\"isSelected\":true,\"name\":\"Advance\"},{\"isSelected\":false,\"name\":\"Proficient\"},{\"isSelected\":false,\"name\":\"Basic\"},{\"isSelected\":false,\"name\":\"Below Basic\"}],\"name\":\"English\"},{\"isSelected\":false,\"languageProficiencies\":[{\"isSelected\":false,\"name\":\"Advance\"},{\"isSelected\":false,\"name\":\"Proficient\"},{\"isSelected\":false,\"name\":\"Basic\"},{\"isSelected\":false,\"name\":\"Below Basic\"}],\"name\":\"Malay\"},{\"isSelected\":false,\"languageProficiencies\":[{\"isSelected\":false,\"name\":\"Advance\"},{\"isSelected\":false,\"name\":\"Proficient\"},{\"isSelected\":false,\"name\":\"Basic\"},{\"isSelected\":false,\"name\":\"Below Basic\"}],\"name\":\"Chinese\"},{\"isSelected\":false,\"languageProficiencies\":[{\"isSelected\":false,\"name\":\"Advance\"},{\"isSelected\":false,\"name\":\"Proficient\"},{\"isSelected\":false,\"name\":\"Basic\"},{\"isSelected\":false,\"name\":\"Below Basic\"}],\"name\":\"Tamil\"}]"
let convertedStr = jsonStr.replacingOccurrences(of: "\\", with: "", options: .literal, range: nil)
print(convertedStr)
要删除单个反斜杠,请尝试以下操作
let replaceStr = backslashString.replacingOccurrences(of: "\"", with: "")
我已经用这段代码解决了:
let convertedStr = jsonString.replacingOccurrences(of: "\\/", with: "/")
我发现在尝试将我的对象编码为JSON时遇到了同样的问题。根据您是否使用较新的jsonecoder
类来解析JSON,并且您至少支持iOS 13,您可以使用。无需使用scapingslashes
输出格式:
let encoder=JSONEncoder()
编码器.outputFormatting=.withoutEscapingSlashes
尝试encoder.encode(您的JSONObject)
反斜杠在哪里?很抱歉,我没有注意到反斜杠消失了。我已经将它们添加到url中。使用它:myString.replacingOccurrences(of:“\\/”,with:“\\”,options:。literal,range:nil)您可以使用带有反斜杠的字符串“#
谢谢您的评论。我不知道如何添加反斜杠,因为我无法执行var str=“http:\/\/”
,或者我遗漏了什么?现在您添加了转义字符和正斜杠。可以添加反斜杠,方法是添加转义字符,后跟反斜杠本身(转义字符)。var str=“http:\\\\www。”想想看,对于一个网站,你需要正斜杠。因此,您可以轻松地分配:var str=“”,但我没有“\\”我只有“\”,因此我甚至无法将其存储到字符串中(至少我不知道如何)。是的,但“\”是保留字符,表示下一个字符指示要做什么(例如,\n
是换行符,\r
是返回符,等等)。在字符串文字中表示“\”的方式,在字符串中表示“\”。我知道这很混乱,但这就是它的工作原理。谢谢你提供的信息。我真的理解所有这些,但我只是想知道如果我得到这种格式的字符串,我是否能做些什么。所以基本上如果我得到带“\”的字符串,我什么也做不了?因为我无法存储此字符串以在swift中将“\”替换为“\”。否,string1。stringByReplacingOccurrencesOfString(“\ \”,with string:”)
将单个反斜杠的出现替换为“”。在字符串文字中指定“单反斜杠”的方式是“\\”。请参阅Swift编程语言的“字符串和字符”一章。我将其更改为myString.replacingOccurrences(of:“\\/”,with:“\\”),如果是