首页 文章

将Charc插入到索引中存在字符X的范围中的字符串 - swift 2.0

提问于
浏览
0

请有人帮帮我 .

我试图在现有字符串中添加一个新行(\ n) .

让我们说这个字符串是20个字符长,我想找到一个15到20之间的空格“”然后插入一个新的行(\ n)就在索引到“”(空格)的位置之后

我希望这是有道理的:F

到目前为止,我对此的代码如下

var newString = string
        newString[newString.startIndex..< newString.startIndex.advancedBy(16)]

       /* let startIndex = newString.startIndex.advancedBy(16)
        let endIndex = newString.endIndex

        let newRange = startIndex ..< endIndex

        print("start index = \(newRange)")*/

        let range: Range<String.Index> = newString.rangeOfString(" ")!
        let index: Int = newString.startIndex.distanceTo(range.startIndex) 


        newString.insert("\n", atIndex: newString.startIndex.advancedBy(index))
        label.text = newString

如果我尝试以下

let newIndex = name.startIndex.advancedBy(19).distanceTo(range.endIndex)

我收到错误消息

致命错误:无法增加endIndex

我有一种感觉,我在正确的轨道上,但上面将在索引处插入一个新行,其中空格首先出现在字符串中,而不是在例如索引之间 . 15和20

感谢您的帮助

托马斯

2 回答

  • 0

    以下内容查找 15..<END_OF_YOUR_STRING 范围内的第一个空格,并将其替换为新行( \n ) . 在您提出的问题中,您明确表示希望在范围 15...20 中查找空格,并在空格后插入新行 . 下面我假设你真的想要:

    • 要用新行替换空格,因为在换行符之后的行上会有一个尾随空格 .

    • 要搜索从索引 15 开始的第一个空格,但一直持续到找到一个(否则:如果在范围 15...20 内找不到空格,则不应插入换行符?) .

    这两个与你的问题的偏差都可以很容易地恢复,所以请告诉我你是否愿意按照你的指示专门指出(而不是包括我自己的理由),我会更新这个答案 .

    解决方案如下:

    var foo = "This is my somewhat long test string"
    let bar = 15 /* find first space " " starting from index 'bar' */
    if let replaceAtIndex = foo[foo.startIndex.advancedBy(bar)..<foo.endIndex]
        .rangeOfString(" ")?.startIndex.advancedBy(bar) {
    
        foo = foo.stringByReplacingCharactersInRange(
            replaceAtIndex...replaceAtIndex, withString: "\n")
    }
    
    print(foo)
    /* This is my somewhat
       long test string    */
    

    请注意,在找到15到20范围内的空格和第15到第20个字符(后者在 14...19 范围内)之间存在一个一个一个的区别 . 在上面,我们搜索从第16个字符开始的第一个空格(索引 15 ) .

  • 1

    感谢dfri让我指向了正确的方向 . 虽然他的回答对我的问题是正确的,但我提供了以下代码来帮助

    if string.characters.count >= 20
        {
    
            let bar = 15 // where to split the code to begin looking for the character
            let beginString = string.substringWithRange(name.startIndex..<name.startIndex.advancedBy(bar))
            var endString = string[string.startIndex.advancedBy(bar)..<name.endIndex]
    
          if endString.containsString(" ")
          {
            let range = endString.rangeOfString(" ")
    
            if let i = range
            {
                endString.insert("\n", atIndex:i.startIndex.advancedBy(1) )
                let newString = "\(beginString)\(endString)"
                label.text = newString
            }
    
            }
    
        }
    

相关问题