Ios Swift:如何在某个字符之前获取字符串?
如何获取swift中某个字符前面的字符串?下面的代码是我在Objective C中如何完成的,但在Swift中似乎无法执行相同的任务。关于如何做到这一点,有什么建议吗Ios Swift:如何在某个字符之前获取字符串?,ios,swift,Ios,Swift,如何获取swift中某个字符前面的字符串?下面的代码是我在Objective C中如何完成的,但在Swift中似乎无法执行相同的任务。关于如何做到这一点,有什么建议吗rangeOfString在swift中似乎根本不起作用(尽管swift又在替我做事) 正如您从上面的代码中看到的,我能够在Objective C中获得空格字符之前的字符串 编辑:如果我尝试这样的事情 var string = "hello Swift" var range : NSRange = string.rangeOfS
rangeOfString
在swift中似乎根本不起作用(尽管swift又在替我做事)
正如您从上面的代码中看到的,我能够在Objective C中获得空格字符之前的字符串
编辑:如果我尝试这样的事情
var string = "hello Swift"
var range : NSRange = string.rangeOfString("Swift")
我得到以下错误
无法将表达式的类型“NSString”转换为类型“(String,
选项:NSStringCompareOptions,范围:range?,区域设置:
NSLocale?'
不确定我到底做错了什么或如何正确解决它。使用componentsSeparatedByString(),如下所示:
var delimiter = " "
var newstr = "token0 token1 token2 token3"
var token = newstr.components(separatedBy: delimiter)
print (token[0])
或者使用您的特定案例:
var delimiter = " token1"
var newstr = "token0 token1 token2 token3"
var token = newstr.components(separatedBy: delimiter)
print (token[0])
您可以对
String
类提供的rangeOfString()
执行相同的操作
let string = "Hello Swift"
if let range = string.rangeOfString("Swift") {
let firstPart = string[string.startIndex..<range.startIndex]
print(firstPart) // print Hello
}
Swift 3更新:
let string = "Hello Swift"
if let range = string.range(of: "Swift") {
let firstPart = string[string.startIndex..<range.lowerBound]
print(firstPart) // print Hello
}
let string=“你好,斯威夫特”
如果let range=string.range(of:“Swift”){
让FrestPosie= String [String,StistCaldial.< P>。如果您想要一个不涉及拖动基础的解决方案,您可以使用<代码>查找< /COD>和切片:
let str = "Hello, I must be going."
if let comma = find(str, ",") {
let substr = str[str.startIndex..<comma]
// substr will be "Hello"
}
let str=“你好,我得走了。”
如果让逗号=查找(str,“,”){
让substr=str[str.startIndex..可以使用rangeOfString
,但它返回的是范围
类型,而不是NSRange
:
let string = "hello Swift"
if let range = string.rangeOfString("Swift") {
print(string.substringToIndex(range.startIndex))
}
要将字符串变为零件,直到指定字符串第一次出现,可以如下扩展字符串:
extension String {
mutating func until(_ string: String) {
let components = self.components(separatedBy: string)
self = components[0]
}
}
这可以这样称呼:
var foo = "Hello Swift"
foo.until(" Swift") // foo is now "Hello"
我的2美分:-)使用Swift 3.0,类似于PHPstrstr
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)
}
}
用法1
"Hello, World!".strstr(needle: ",", beforeNeedle: true) // returns Hello
用法2
"Hello, World!".strstr(needle: " ") // returns World!
接下来是Syed Tariq的回答:如果您只希望字符串位于分隔符之前(否则,您将收到一个数组[string]):
let string=“你好,世界”
如果let range=string.range(of:“-”){
让firstPart=string[(string.startIndex)…下面是一个完整的组合
let string = "This a string split using * and this is left."
if let range = string.range(of: "*") {
let lastPartIncludingDelimiter = string.substring(from: range.lowerBound)
print(lastPartIncludingDelimiter) // print * and this is left.
let lastPartExcludingDelimiter = string.substring(from: range.upperBound)
print(lastPartExcludingDelimiter) // print and this is left.
let firstPartIncludingDelimiter = string.substring(to: range.upperBound)
print(firstPartIncludingDelimiter) // print This a string split using *
let firstPartExcludingDelimiter = string.substring(to: range.lowerBound)
print(firstPartExcludingDelimiter) // print This a string split using
}
您可以使用Swift 4或更高版本中的方法
var string = "hello Swift"
if let index = string.firstIndex(of: " ") {
let firstPart = string.prefix(upTo: index)
print(firstPart) // print hello
}
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
这应该根据您的需要和边缘情况进行微调。在Swift中,他们也使用了rangeOfString,而且似乎很有效。我编辑了我的问题,以便更好地解释在尝试应用您的解决方案时发生的情况。您可以使用Range
而不是NSRange
:让Range:Range?=string.rangeOfString(“Swift”)
。您也可以将String
强制转换为NSString
:var range:NSRange=(字符串为NSString)。rangeOfString(“Swift”)
是的……它可以工作……但如果我想在某个字符之后获取字符串呢?@Bhavin查找(str,”)。successiver()
@allfind
在Swift 2.0奇妙的答案中不再受支持。我试图找出如何使用rangeOfString来完成此任务,但这要高效得多。
var token = newstr.components(separatedBy: delimiter).first
let string = "Hello-world"
if let range = string.range(of: "-") {
let firstPart = string[(string.startIndex)..<range.lowerBound]
print(firstPart)
}
let string = "This a string split using * and this is left."
if let range = string.range(of: "*") {
let lastPartIncludingDelimiter = string.substring(from: range.lowerBound)
print(lastPartIncludingDelimiter) // print * and this is left.
let lastPartExcludingDelimiter = string.substring(from: range.upperBound)
print(lastPartExcludingDelimiter) // print and this is left.
let firstPartIncludingDelimiter = string.substring(to: range.upperBound)
print(firstPartIncludingDelimiter) // print This a string split using *
let firstPartExcludingDelimiter = string.substring(to: range.lowerBound)
print(firstPartExcludingDelimiter) // print This a string split using
}
var string = "hello Swift"
if let index = string.firstIndex(of: " ") {
let firstPart = string.prefix(upTo: index)
print(firstPart) // print hello
}
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