2016-05-27 5 views
1

Ich habe die Zeichenfolge folgende Ich möchte bearbeiten:Löschen Zeichen in Bereich der String-

var someString = "I wan't this text {something I don't want}" 

ich in den beiden Klammern enthalten alle den Text entfernen möchte, egal wie lange der Text ist. Ich habe die Folge Code wurde mit einem Abschnitt einer Schnur zu entfernen, wenn ich den Bereich kennen:

extension String { 
    mutating func deleteCharactersInRange(range: NSRange) { 
     let mutableSelf = NSMutableString(string: self) 
     mutableSelf.deleteCharactersInRange(range) 
     self = mutableSelf 
    } 
} 

Allerdings habe ich nicht den Bereich, in meinem Problem kennen. Irgendwelche Ideen?

+0

@Alexander Sorry für die schnelle und falsche Antwort. Getestet mit deiner Erweiterung im Spielplatz ... es funktioniert jetzt. – Idan

Antwort

3

mit Streichern und Bereichen arbeiten kann ziemlich schwierig sein, wenn NSString und NSRange mit Swift String und Range mischt.

Hier ist eine reine Swift-Lösung.

var someString = "I wan't this text {something I don't want}" 

let rangeOpenCurl = someString.rangeOfString("{") 
let rangeCloseCurl = someString.rangeOfString("}") 
if let startLocation = rangeOpenCurl?.startIndex, 
    let endLocation = rangeCloseCurl?.endIndex { 
    someString.replaceRange(startLocation ..< endLocation, with: "") 
} 
0
extension String { 
    func getCurlyBraceRanges() -> [NSRange] { 
     var results = [NSRange]() 
     var leftCurlyBrace = -1 
     for index in 0..<self.characters.count { 
      let char = self[self.startIndex.advancedBy(index)] 
      if char == Character("{") { 
       leftCurlyBrace = index 
      } else if char == Character("}") { 
       if leftCurlyBrace != -1 { 
        results.append(NSRange(location: leftCurlyBrace, length: index - leftCurlyBrace + 1)) 
        leftCurlyBrace = -1 
       } 
      } 

     } 
     return results 
    } 
    mutating func deleteCharactersInRange(range: NSRange) { 
     let mutableSelf = NSMutableString(string: self) 
     mutableSelf.deleteCharactersInRange(range) 
     self = String(mutableSelf) 
    } 
    mutating func deleteCharactersInRanges(ranges: [NSRange]) { 
     var tmpString = self 
     for i in (0..<ranges.count).reverse() { 
      tmpString.deleteCharactersInRange(ranges[i]) 
      print(tmpString) 
     } 
     self = tmpString 
    } 
} 

var testString = "I wan't this text {something I don't want}" 

testString.deleteCharactersInRanges(testString.getCurlyBraceRanges()) 

Ausgang: "Ich wan't diesen Text"

1

Mit einem regulären Ausdrucks alles eingeschlossen mit geschweiften Klammern entsprechen:

var sourceString: String = "I wan\'t this text {something I don't want}" 

let destinationString = sourceString.stringByReplacingOccurrencesOfString("\\{(.*?)\\}", withString: "", options: .RegularExpressionSearch) 

print(destinationString) 

Dies druckt „Ich wan 't dieser Text " ohne die Anführungszeichen.