【问题标题】:Swift replace first character in stringSwift替换字符串中的第一个字符
【发布时间】:2015-08-12 23:47:52
【问题描述】:

一个很简单的问题,如何替换字符串的第一个字符。我可能做错了什么,但我根本无法让它发挥作用。

我试过这个:var query = url.query!.stringByReplacingOccurrencesOfString("&", withString: "?", options: NSStringCompareOptions.LiteralSearch, range: NSMakeRange(0, 1))

但它给了我以下错误:

无法使用类型为“(String, withString: String, options: NSStringCompareOptions, range: NSRange)”的参数列表调用“stringByReplacingOccurrencesOfString”

当我删除 NSMakeRange 并将其更改为 nil 时,它可以工作,但它会替换字符串中的所有 &。

【问题讨论】:

  • 当您将nil 作为range 传递时,它当然会像您使用stringByReplacingOccurrencesOfString 一样替换所有& 字符。
  • 我明白了,我只是想告诉你我成功了。

标签: ios swift


【解决方案1】:

Swift 4 或更高版本

let string = "&whatever"
let output = "?" + string.dropFirst()

修改字符串

var string = "&whatever"
if !string.isEmpty {
    string.replaceSubrange(...string.startIndex, with: "?")
    print(string)  // "?whatever\n"
}

【讨论】:

    【解决方案2】:

    你可以试试这个:

    var s = "123456"
    
    let s2 = s.replacingCharacters(in: ...s.startIndex, with: "a")
    
    s2 // "a23456"
    

    【讨论】:

    • 请注意,如果字符串为空会导致应用崩溃
    【解决方案3】:
    let range = Range(start: query.startIndex, end: query.startIndex.successor())
    query.replaceRange(range, with: "?")
    

    或更短

    let s = query.startIndex
    query.replaceRange(s...s, with: "?")
    

    这与 Objective-C 有点不同——但我猜我们会习惯的 ;-)。

    如果您对此感到不舒服,您可以随时退回到旧的 NSString API:

    let newQuery = (query as NSString).stringByReplacingCharactersInRange(
      NSMakeRange(0,1), withString: "?") // as String not necessary
    

    【讨论】:

    • let i = query.startIndex; query.replaceRange(i...i, with: "?")
    • 谢谢 - 我已将其包含在我的回答中。
    • NSMakeRange(0,1) 之后缺少逗号,newQuery 将变为 String,即使您不执行 as String 演员表。这也让我感到惊讶。
    【解决方案4】:

    在 Swift 4.0 中

    let inputString = "!Hello"
    let outputString = String(inputString.dropFirst())
    

    回答

    outputString = "Hello"
    

    【讨论】:

      【解决方案5】:

      问题在于您传递的是一个 NSRange 值,而该值应该是一个 Range 对象。 使用 Swift 字符串时,必须使用

      Range<String.Index>(start: str.startIndex, end: advance(str.startIndex, 1))
      

      【讨论】:

      • 我现在正在使用:var query = url.query!.stringByReplacingOccurrencesOfString("&", withString: "?", options: NSStringCompareOptions.LiteralSearch, range: Range(start : url.query!.startIndex, end: advance(url.query!.startIndex, 1))) 但它仍然没有替换第一个字符。我还是做错了什么吗?
      【解决方案6】:

      在 Swift 2.0 中,您可以执行以下操作:-

      let inputString = "!Hello"
      let outputString = String(inputString.characters.dropFirst())
      
      //Answer
      outputString = "Hello"
      

      【讨论】:

        【解决方案7】:

        斯威夫特 4.0

        extension String
        {
            func replace_fromStart(str:String , endIndex:Int , With:String) -> String {
                var strReplaced = str ;
                let start = str.startIndex;
                let end = str.index(str.startIndex, offsetBy: endIndex);
                strReplaced = str.replacingCharacters(in: start..<end, with: With) ;
                return strReplaced;
            }
        }
        

        在任何地方使用它

        MY_String.replace_fromStart(str: MY_String, endIndex: 10, With: "**********")
        

        【讨论】:

          【解决方案8】:

          另一个答案

          使用后缀

          var s = "1234567"
          var transform = "?" + s.suffix(max(s.count - 1, 0))
          transform // "?234567"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-12-11
            • 2015-03-19
            • 2020-03-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多