agf*_*105 16 string substring swift
在Objective-C我用过:
[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];
Run Code Online (Sandbox Code Playgroud)
但现在NSBackWardsSearch似乎不存在.任何人都可以提供Swift的等效代码吗?
如果可能的话,我希望能够在整个字符串中找到字符编号.所以在上面的例子中它将返回3.
out*_*tis 17
Cocoa框架应该可以在Swift中访问,但是你需要导入它们.尝试导入Foundation以访问NSString API.来自" 使用Swift with Cocoa和Objective-C"的"使用Cocoa数据类型 - 字符串 "指南:
Swift自动在String类型和NSString类之间架起桥梁.[...]要启用字符串桥接,只需导入Foundation.
另外,NSBackwardsSearch是一个枚举值(标记并作为选项导入),因此您必须使用Swift的枚举/选项语法来访问它(作为NSStringCompareOptions选项类型的一部分).从C枚举值中删除前缀,因此NS从值名称中删除.
总而言之,我们有:
import Foundation
"abc def ghi abc def ghi".rangeOfString("c", options:NSStringCompareOptions.BackwardsSearch)
Run Code Online (Sandbox Code Playgroud)
请注意,您可能必须使用distance和advance函数来正确使用范围rangeOfString.
Wom*_*ble 16
如果要替换字符串中的最后一个子字符串:
(斯威夫特3)
extension String
{
func replacingLastOccurrenceOfString(_ searchString: String,
with replacementString: String,
caseInsensitive: Bool = true) -> String
{
let options: String.CompareOptions
if caseInsensitive {
options = [.backwards, .caseInsensitive]
} else {
options = [.backwards]
}
if let range = self.range(of: searchString,
options: options,
range: nil,
locale: nil) {
return self.replacingCharacters(in: range, with: replacementString)
}
return self
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let alphabet = "abc def ghi abc def ghi"
let result = alphabet.replacingLastOccurrenceOfString("ghi",
with: "foo")
print(result)
// "abc def ghi abc def foo"
Run Code Online (Sandbox Code Playgroud)
或者,如果要完全删除最后一个子字符串,并将其清理:
let result = alphabet.replacingLastOccurrenceOfString("ghi",
with: "").trimmingCharacters(in: .whitespaces)
print(result)
// "abc def ghi abc def"
Run Code Online (Sandbox Code Playgroud)
pha*_*m_2 12
Swift 3.0:
"abc def ghi abc def ghi".range(of: "c", options: String.CompareOptions.backwards, range: nil, locale: nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10407 次 |
| 最近记录: |