Swift - 从字符串中移除双引号

100

我有一个字符串是 "Optional("5")"。我需要去掉包围数字 5 的双引号 ""。我已经通过以下方法移除了 Optional

text2 = text2.stringByReplacingOccurrencesOfString("Optional(", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

由于在代码中," 字符表示字符串的结束,因此我很难将其删除。


24
如果这个字符串实际上包含字符Optional("5"),那么可能之前出了一些问题,因为这是可选字符串的描述。在将其文本内容删除之前,将可选项解包后再分配给text2会更有意义。请注意,不要改变原来的意思。 - Martin R
13个回答

189
Swift使用反斜杠转义双引号。以下是Swift中转义的特殊字符列表:
- `\0`(空字符) - `\\`(反斜杠) - `\t`(水平制表符) - `\n`(换行符) - `\r`(回车符) - `\"`(双引号) - `\'`(单引号)
这应该可以工作:
text2 = text2.replacingOccurrences(of: "\\", with: "", options: NSString.CompareOptions.literal, range: nil)

1
很遗憾,在Swift 1.2上,这在32位设备上似乎无法工作。 - PassKit
1
@GerardGrundy 非常感谢您的评论!我更新了答案,使其与现代版本的Swift兼容。 - Sergey Kalinichenko
@Sergey Kalinichenko您好,我该如何删除一个字符串中的多个字符集?例如,我想根据字符串包含的内容删除“.mp3”或“.m4a”。我该怎么做? - VyacheslavBakinkskiy
@VyacheslavBakinkskiy https://dev59.com/E18e5IYBdhLWcg3wlbPx#71977992 - Soorej Babu

71

Swift 3 和 Swift 4:

text2 = text2.textureName.replacingOccurrences(of: "\"", with: "", options: NSString.CompareOptions.literal, range:nil)

最新更新至Swift 3.0.1的文档包含以下内容:
- 空字符(\0) - 反斜杠(\\) - 水平制表符(\t) - 换行符(\n) - 回车符(\r) - 双引号(\") - 单引号(\') - Unicode标量(\u{n}),其中n为一到八个十六进制数字。
如果您需要更多详细信息,请查看官方文档这里

39

这里是更新至swift 3的答案

var editedText = myLabel.text?.replacingOccurrences(of: "\"", with: "")
Null Character (\0)
Backslash (\\)
Horizontal Tab (\t)
Line Feed (\n)
Carriage Return (\r)
Double Quote (\")
Single Quote (\')
Unicode scalar (\u{n})

这是一种更加简洁的做法。 - Super_Simon

9

将“替换”改为“删除”并不太合逻辑。String.filter允许逐个字符迭代字符串并仅保留真实断言。

Swift 4&5

var aString = "Optional(\"5\")"

aString = aString.filter { $0 != "\"" }

> Optional(5)

或者扩展

var aString = "Optional(\"5\")"

let filteredChars = "\"\n\t"

aString = aString.filter { filteredChars.range(of: String($0)) == nil }

> Optional(5)

抱歉,Luc,你的第二个例子出现了错误信息。参数类型“String.Element”(又名“Character”)不符合预期的类型“StringProtocol”。我猜你漏掉了什么? - user3069232

8
要删除可选项,您只需要执行以下操作:
println("\(text2!)")

如果你没有使用 "!",它会带上 text2 的可选值。

要从 5 中去除 "",你需要将其转换为 NSInteger 或 NSNumber。这是因为它是一个字符串。


1
应该先检查它不是nil,否则会引发异常。 - CW0007007

8

我最终在示例中成功实现了以下功能:尝试从字符串中删除多个字符:

var otherstring = "lat\" : 40.7127837,\n"
var new = otherstring.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "la t, \n \" ':"))
count(new) //result = 10
println(new) 
//yielding what I'm after just the numeric portion 40.7127837

1
请问能否澄清一下:这里所询问的问题是什么? - milez

8

如果你想从字符串中删除更多的字符,比如"a"、"A"、"b"、"B"、"c"和"C",你可以按照以下方式进行:

someString = someString.replacingOccurrences(of: "[abc]", with: "", options: [.regularExpression, .caseInsensitive])

4

正如Martin R所说,你的字符串“Optional("5")”看起来好像有些问题。

dasblinkenlight已经回答了你,所以现在没问题了。但是为了方便日后的读者,我将尝试添加另一段代码:

if let realString = yourOriginalString {
    text2 = realString
} else {
    text2 = ""
}

你示例中的text2看起来像是字符串,可能已经被设置为空字符串,但是你似乎在某处有一个类型为Optional(String)的yourOriginalString,它没有被正确地转换或使用。

我希望这能帮助一些读者。


1
这可以使用空合并运算符进一步简化,例如 let resultingString = optionalString ?? "" - Kilian

2

假设您有一个字符串:

var string = "potatoes + carrots"

你想在该字符串中用“番茄”替换“土豆”这个词。

string = string.replacingOccurrences(of: "potatoes", with: "tomatoes", options: NSString.CompareOptions.literal, range: nil)

如果您打印您的字符串,它现在将是:"tomatoes + carrots" 如果您想完全删除字符串中的单词potatoes,您可以使用:
string = string.replacingOccurrences(of: "potatoes", with: "", options: NSString.CompareOptions.literal, range: nil)

如果你想在字符串中使用其他字符,可以使用以下字符:

  • 空字符 (\0)
  • 反斜杠 (\)
  • 水平制表符 (\t)
  • 换行符 (\n)
  • 回车符 (\r)
  • 双引号 (\")
  • 单引号 (\')

例如:

string = string.replacingOccurrences(of: "potatoes", with: "dog\'s toys", options: NSString.CompareOptions.literal, range: nil)

输出:"狗的玩具 + 胡萝卜"

这是最简单和最有效的方法。它改变变量本身而不是创建一个新的变量。我尽力以最好的方式解释了这一点,请记得给这个答案点赞。 - Mini Official

2

Swift 5(进行中)。仅需1行代码。

用于删除单个/多个字符。

trimmingCharacters(in: CharacterSet)

实际运用:

var yourString:String = "(\"This Is: Your String\")"
yourString = yourString.trimmingCharacters(in: ["("," ",":","\"",")"])
print(yourString)

输出:

ThisIsYourString

你正在进入一个包含字符的 Set ,你需要对它们进行修剪。

2
这是错误的答案。修剪函数只删除字符串开头和结尾的字符,而将它们保留在字符串内部。 - Anton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接