如何在swift中的某个字符前获取字符串?下面的代码是我在Objective C中的表现,但似乎无法在Swift中执行相同的任务.有关如何实现这一目标的任何提示或建议?rangeOfString似乎在swift中根本不起作用(尽管Swift一直在为我做准备).
NSRange range = [time rangeOfString:@" "];
NSString *startDate =
[time substringToIndex:range.location];
Run Code Online (Sandbox Code Playgroud)
从上面的代码中可以看出,我能够在Objective C中的空格字符之前获取字符串.
编辑:如果我尝试这样的事情
var string = "hello Swift"
var range : NSRange = string.rangeOfString("Swift")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
无法将表达式的类型'NSString'转换为''(String,options:NSStringCompareOptions,range:Range?,locale:NSLocale?)'
不确定我做错了什么或如何正确解决它.
Sye*_*riq 98
使用componentsSeparatedByString()如下所示:
var delimiter = " "
var newstr = "token0 token1 token2 token3"
var token = newstr.components(separatedBy: delimiter)
print (token[0])
Run Code Online (Sandbox Code Playgroud)
或者使用您的具体案例:
var delimiter = " token1"
var newstr = "token0 token1 token2 token3"
var token = newstr.components(separatedBy: delimiter)
print (token[0])
Run Code Online (Sandbox Code Playgroud)
Kev*_*ado 25
您可以rangeOfString()按String类提供相同的操作
let string = "Hello Swift"
if let range = string.rangeOfString("Swift") {
let firstPart = string[string.startIndex..<range.startIndex]
print(firstPart) // print Hello
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用您的方法实现它substringToIndex()
let string = "Hello Swift"
if let range = string.rangeOfString("Swift") {
firstPart = string.substringToIndex(range.startIndex)
print(firstPart) // print Hello
}
Run Code Online (Sandbox Code Playgroud)
Swift 3更新:
let string = "Hello Swift"
if let range = string.range(of: "Swift") {
let firstPart = string[string.startIndex..<range.lowerBound]
print(firstPart) // print Hello
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮到你 ;)
Mic*_*ang 10
您可以在Swift 4 或更高版本中使用方法prefix(upTo:)
var string = "hello Swift"
if let index = string.firstIndex(of: " ") {
let firstPart = string.prefix(upTo: index)
print(firstPart) // print hello
}
Run Code Online (Sandbox Code Playgroud)
小智 9
跟进Syed Tariq的回答:如果你只想在分隔符之前使用字符串(否则,你收到一个数组[String]):
var token = newstr.components(separatedBy: delimiter).first
Run Code Online (Sandbox Code Playgroud)
Swift 5 扩展
extension String {
func stringBefore(_ delimiter: Character) -> String {
if let index = firstIndex(of: delimiter) {
return String(prefix(upTo: index))
} else {
return ""
}
}
func stringAfter(_ delimiter: Character) -> String {
if let index = firstIndex(of: delimiter) {
return String(suffix(from: index).dropFirst())
} else {
return ""
}
}
}
let str = "n1:lolz"
print(str.stringBefore(":")) // n1
print(str.stringAfter(":")) // lolz
let str = "n1:"
print(str.stringBefore(":")) // n1
print(str.stringAfter(":")) // empty string
let str = "n1+lolz"
print(str.stringBefore(":")) // empty string
print(str.stringAfter(":")) // empty string
Run Code Online (Sandbox Code Playgroud)
这应该根据您的需求和边缘情况进行微调。
我的 2 美分 :-) 使用 Swift 3.0,类似于 PHP strstr
extension String {
func strstr(needle: String, beforeNeedle: Bool = false) -> String? {
guard let range = self.range(of: needle) else { return nil }
if beforeNeedle {
return self.substring(to: range.lowerBound)
}
return self.substring(from: range.upperBound)
}
}
Run Code Online (Sandbox Code Playgroud)
用法1
"Hello, World!".strstr(needle: ",", beforeNeedle: true) // returns Hello
Run Code Online (Sandbox Code Playgroud)
用法2
"Hello, World!".strstr(needle: " ") // returns World!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45448 次 |
| 最近记录: |