Swift

2015-01-21 26 views
7

Birden Fazla Karakteri Değiştirin Bir HTML break etiketini bir satır başı ile değiştirmek için kullandığım aşağıdaki kod satırı aşağıdadır. Bununla birlikte, değiştirmem gereken başka HTML sembollerim var ve bu kod satırını tekrar tekrar çağırdığımda, farklı parametrelerle, ilkinin üzerine yazılmış gibi. Birden fazla parametre ekleyebileceğim bir yol var mı? Swift'de bunu yapmanın daha verimli bir yolu var mı? Örneğin: her iki br> yerine "" ve nbsp "" ile değiştirin. @matt aynı content dizeyle üzerinde başlayan belirtildiği gibiSwift

textView.text = content.stringByReplacingOccurrencesOfString("<br /><br />", withString:"\r") 
+0

nasıl göster msgstr "bu kod satırını tekrar çağır". Sonuçta yanlış gittiğin yer burası. – matt

+0

textView.text = content.stringByReplacingOccurrencesOfString ("

", withString: "\ r") textView.text = content.stringByReplacingOccurrencesOfString (" ", withString:" ") –

+0

Ama problem var. Orijinal içerikten başlıyorsunuz. Metin görünümünün üzerine yazılır, çünkü _you_ üzerine yazılır! – matt

cevap

5

. StringByReplacingOccurrencesOfString yöntemi, aslında orijinal content dizesindeki hiçbir şeyi değiştirmez. content değişmeden kalırsa, değişiklikle birlikte yeni bir dize döndürür. yazdırıldığında

let str = "Hello, stackoverflow" 
let chars: [Character] = ["a", "e", "i"] 
let myStrings = ["Hello", ", ", "overflow"] 

let newString = str.stringByRemovingAll(chars) 
let anotherString = str.stringByRemovingAll(myStrings) 

Sonuç: Ben Rosetta Code

extension String { 
    func stringByRemovingAll(characters: [Character]) -> String { 
     return String(self.characters.filter({ !characters.contains($0) })) 
    } 

    func stringByRemovingAll(subStrings: [String]) -> String { 
     var resultString = self 
     subStrings.map { resultString = resultString.stringByReplacingOccurrencesOfString($0, withString: "") } 
     return resultString 
    } 
} 

Örnek fikrine dayalı Çözmedim böyle

Bir şey

let result1 = content.stringByReplacingOccurrencesOfString("<br /><br />", withString:"\r") 
let result2 = result1.stringByReplacingOccurrencesOfString(" &nbsp;", withString:" ") 
textView.text = result2 
1
extension String { 
    var html2AttributedString:NSAttributedString { 
     return NSAttributedString(data: dataUsingEncoding(NSUTF8StringEncoding)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding], documentAttributes: nil, error: nil)! 
    } 
} 

let myHtmlCode = "<style type=\"text/css\">#red{color:#F00}#green{color:#0F0}#blue{color: #00F}</style><span id=\"red\" >Red</span> <span id=\"green\" >Green</span><span id=\"blue\">Blue</span>" 

myHtmlCode.html2AttributedString 
6

için çalışmalıdır :

-dizge: Hllo, stckovrflow

anotherString: stack

+2

Bu verimli bir çözüm değil, CompareOptions.CompareOptions kullanarak yanıtımı gör .regularExpression –

+0

@Michael Ama sanırım bu daha genel durumlarda çalışıyor. Dizelerim normal ifadeler değilse ne olur? Cevabınız nasıl değişir? –

+0

@KarthikKannan Cevabımı aşağıdan mı kullanıyorsunuz? Yanlış cevapta yorum yaptınız mı? Eğer öyleyse, başkaları için karışıklığı önlemek için lütfen cevabımda soruyu tekrarlayın. –

10

kullanın replacingOccurrences bir String.CompareOptions.regularExpresion seçeneğiyle birlikte.

Örnek (Swift 3): gibi köşeli parantez içindeki ikame edilecek

var x = "<Hello, [play^ground+]>" 
let y = x.replacingOccurrences(of: "[\\[\\]^+<>]", with: "7", options: .regularExpression, range: nil) 
print(y) 

Giriş karakterleri çok [\\ Özellikleri]

Çıkış

:

7Hello, 7play7ground777 
+0

Bu harika & tam olarak aradığım şey!RegEx'in harika kullanımı, Swift'de fazla kullanmadığım bir şey. Harika cevap için teşekkürler Michael. – Trev14

+0

Açıklar mısınız - her zaman '.regularExpression' kullanmalı mıyım? Ya değiştirmek/silmek zorunda olduğum somut sembollerin bir listesini belirtmem gerekirse? –

+0

Başka yollar da olabilir, ancak normal ifade, bir dizi somut karakteri temsil etmenin iyi bir yoludur. Örneğin "A", "B" ve "Z" harflerini değiştirmek istediğimde, kod şöyle görünecektir: x.replacingOccurrences (of: "[ABZ]", ile: "7", seçenekler: .regularExpression, range : nil) –