在字符串中的特定字符之后插入字符:Swift

时间:2016-08-10 09:17:08

标签: ios swift

我有一个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

请尽量避免使用索引计数,因为长度每次都是可变的,因此每次等于(=)的位置也会不同。

4 个答案:

答案 0 :(得分:3)

您可以使用 stringByReplacingOccurrencesOfString 概念将 = 替换为 = -

 let aString: String = "http://www.corpebl.com/blog.php?show=250"
    let newString = aString.stringByReplacingOccurrencesOfString("=", withString: "=-")
    print(newString)

你得到输出,如

enter image description here

答案 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"
}

是的,它似乎更多的工作,但我认为它也更灵活。

希望你能用它。