Swift-从字符串中删除字符


81

我有一个字符串,它是“ Optional(“ 5”)“。我需要删除5号周围的“”。我通过执行以下操作删除了“可选”项:

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

我在删除“字符时遇到困难,因为它们在代码中指定了字符串的结尾。


22
如果字符串实际上由字符组成,Optional("5")则可能是更早出现了问题,因为这是对可选字符串的描述。在将可选内容分配给之前text2,先解开可选内容,而不是从文本上删除“ Optional(..)”会更有意义。
Martin R

Answers:


166

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兼容。
谢尔盖·卡利尼琴科

57

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在1到8个十六进制数字之间

如果您需要更多详细信息,可以在这里查看官方文档


26

这是迅速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

8

要删除可选件,您仅应执行此操作

println("\(text2!)")

原因,如果您不使用“!” 它采用text2的可选值

要从5中删除“”,您必须将其转换为NSInteger或NSNumber easy peasy。它有“”个字符串。


1
首先应检查它是否为nil,否则将引发异常。
CW0007007

6

我最终将其在操场上使用,尝试从字符串中删除多个字符:

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 2015年

5

如果要从字符串中删除更多字符,例如“ 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看起来像String,并且可能已经设置为“”,但是看起来您在某个未正确使用或未正确使用的地方有一个类型为Optional(String)的yourOriginalString。

我希望这可以对一些读者有所帮助。


1
使用nil-coalescing运算符(例如)可以进一步简化该操作let resultingString = optionalString ?? ""
基利安

4

替换删除不是很合逻辑。String.filter允许按char迭代字符串char并仅保留true断言。

斯威夫特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'(aka'字符')与预期类型'StringProtocol'不符。我想您错过了什么吗?
user3069232 '19

2

假设您有一个字符串:

var string = "potatoes + carrots"

并且您想用“ tomatoes”替换该字符串中的“ potatoes”一词

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

如果您打印字符串,现在将是: "tomatoes + carrots"

如果要完全从the中删除土豆一词,可以使用:

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)

输出: "dog's toys + carrots"


这是最简单,最有效的方法。而是更改变量本身而不是创建新变量。我尽力以最好的方式来解释这个问题,因此请记住要对这个答案进行投票。
迷你官方

0

您已将text2实例化为Optional(例如var text2:String?)。这就是为什么您在字符串中收到Optional(“ 5”)的原因。带走了?并替换为:

var text2: String = ""

0

如果Optional(5)尝试打印5可选的IntString中的值时得到输出,则应首先解包该值:

if let value = text {
    print(value)
}

现在,您获得的值不包含之前未解开值时Swift会添加的“可选”字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.