Ios Swift-删除单个反斜杠

Ios Swift-删除单个反斜杠,ios,swift,backslash,Ios,Swift,Backslash,这也许是个愚蠢的问题,但我对斯威夫特还不熟悉,实际上我无法理解 我有一个API,它以字符串“http:\/\/xxx”的形式返回url。我不知道如何以这种格式存储从API返回的URL。由于反斜杠,我无法将其存储到变量 从苹果文档: …字符串不能包含未转换的反斜杠(\) 有没有办法像这样存储字符串,或者如何删除这些反斜杠,或者如何使用这些反斜杠 感谢您的建议。通过添加额外的反斜杠在字符串中包含反斜杠。您可以替换这些反斜杠,例如: let string2 = string1.stringByRepl

这也许是个愚蠢的问题,但我对斯威夫特还不熟悉,实际上我无法理解

我有一个API,它以字符串“http:\/\/xxx”的形式返回url。我不知道如何以这种格式存储从API返回的URL。由于反斜杠,我无法将其存储到变量

从苹果文档:

…字符串不能包含未转换的反斜杠(\)

有没有办法像这样存储字符串,或者如何删除这些反斜杠,或者如何使用这些反斜杠


感谢您的建议。

通过添加额外的反斜杠在字符串中包含反斜杠。

您可以替换这些反斜杠,例如:

let string2 = string1.stringByReplacingOccurrencesOfString("\\", withString: "")
但是,如果可能的话,您真的应该修复返回这些反斜杠的API,因为这显然是不正确的。该代码的作者显然有一个错误的印象,即必须转义前斜杠,但事实并非如此

总之,API应该固定为不插入这些反斜杠,但在修复之前,您可以使用上面的方法删除可能出现的任何反斜杠


在下面评论中的讨论中,对于字符串中的反斜杠似乎存在巨大的混淆。那么,让我们退一步讨论一下“字符串文字”。如上所述,字符串文字是:

您可以将预定义的
String
值作为字符串文字包含在代码中。字符串文字是由一对双引号(
)包围的文本字符的固定序列

请注意,字符串文字只是代码中特定固定字符序列的表示形式。但是,这不应该与底层的
字符串
对象本身混淆。字符串文本和底层
string
对象之间的关键区别在于,字符串文本允许使用反斜杠作为“转义”字符,用于表示特殊字符(或执行)。作为:

字符串文字可以包括以下特殊字符:

  • 转义的特殊字符
    \0
    (空字符)、
    \
    (反斜杠)、
    \t
    (水平选项卡)、
    \n
    (换行符)、
    \r
    (回车符)、
    \”
    (双引号)和
    \
    (单引号)
  • 任意Unicode标量,写为
    \u{n}
    ,其中
    n
    是一个1-8位的十六进制数,其值等于有效的Unicode码点
因此,正如上面引用的摘录所指出的,在字符串文本中,不能有一个未经转换的反斜杠,这是正确的。因此,每当您想在字符串文本中表示一个反斜杠时,都可以使用
\\
来表示

因此,上面的
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:“\\”),如果是