我有一个Url字符串,我想在等于符号(=)之后插入减号“ - ”。 我有以下字符串: -
http://www.corpebl.com/blog.php?show=250
或
http://www.bdm.com/gm.php?id=2
我想要以下字符串: -
http://www.corpebl.com/blog.php?show=-250
或
http://www.bdm.com/gm.php?id=-2
请尽量避免使用索引计数,因为长度每次都是可变的,因此每次等于(=)的位置也会不同。
答案 0 :(得分:3)
您可以使用 stringByReplacingOccurrencesOfString 概念将 = 替换为 = -
let aString: String = "http://www.corpebl.com/blog.php?show=250"
let newString = aString.stringByReplacingOccurrencesOfString("=", withString: "=-")
print(newString)
你得到输出,如
答案 1 :(得分:3)
您应该可以将=
替换为=-
:
let s = "http://www.corpebl.com/blog.php?show=250"
let res = s.stringByReplacingOccurrencesOfString("=", withString: "=-", options: NSStringCompareOptions.LiteralSearch, range: nil)
如果字符串中有多个等号,这有点危险。更精确的方法是找到第一个(或最后一个)等号,并手动组成结果字符串:
let s : NSString = "http://www.corpebl.com/blog.php?show=250"
let p = s.rangeOfString("=")
if p.location != NSNotFound {
let res : String = s.stringByReplacingCharactersInRange(p, withString: "=-")
}
答案 2 :(得分:2)
NSURLComponents
允许您访问和修改每个部分
有选择地的URL。这里有一个如何替换的例子
show=<num>
show=<-num>
即使在多个查询项列表中也是如此:
var urlString = "http://www.corpebl.com/blog.php?foo&show=250&bar=baz"
if var urlComponents = NSURLComponents(string: urlString),
var queryItems = urlComponents.queryItems {
for (idx, query) in queryItems.enumerate() {
if query.name == "show", let val = query.value, let num = Int(val) {
queryItems[idx] = NSURLQueryItem(name: query.name, value: String(-num))
}
}
urlComponents.queryItems = queryItems
urlString = urlComponents.string!
}
print(urlString) // http://www.corpebl.com/blog.php?foo&show=-250&bar=baz
答案 3 :(得分:2)
我知道你现在有一个有效的解决方案,但我认为我会用一些更通用的东西来填充。
如果您想要更多地控制哪些参数附加减号,您应该查看NSURLQueryItem
类(记录为here)。
您可以使用NSURLComponents
类(记录为here)将URL分成组件,然后可以访问queryItems
数组。
类似于:
if let components = NSURLComponents(string: "http://www.corpebl.com/blog.php?show=250"),
let queryItems = components.queryItems {
}
将为您提供一个URL,从您的字符串中拆分成组件,并在数组中包含查询项。现在,您已准备好查看各个queryItems:
for item in queryItems where item.value != nil {
//here you can check on the item.name
//and if that matches whatever you need, you can do your magic
}
所以,一个只为所有参数添加减号并从中返回一个URL字符串的函数可能如下所示:
func addMinusToParameters(inURLString urlString: String) -> String? {
guard let components = NSURLComponents(string: urlString),
let queryItems = components.queryItems else {
return nil
}
var minusItems = [NSURLQueryItem]()
for item in queryItems where item.value != nil {
minusItems.append(NSURLQueryItem(name: item.name, value: "-\(item.value!)"))
}
components.queryItems = minusItems
guard let minusUrl = components.URL else {
return nil
}
return minusUrl.absoluteString
}
一个例子:
if let minusString = addMinusToParameters(inURLString: "http://www.corpebl.com/blog.php?show=250&id=23") {
print(minusString) //gives you "http://www.corpebl.com/blog.php?show=-250&id=-23"
}
是的,它似乎更多的工作,但我认为它也更灵活。
希望你能用它。