2015-01-21 96 views
7

下面是我用來用回車替換HTML分隔標記的以下代碼行。但是,我有其他需要替換的HTML符號,並且當我使用不同的參數再次調用這行代碼時,就好像第一個代碼被覆蓋。有沒有一種方法可以包含多個參數?在Swift中有更有效的方法嗎?例如:用「」替換「」,用「」替換。Swift替換字符串中的多個字符

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

顯示如何「再次調用這行代碼」。畢竟,這就是你出錯的地方。 – matt 2015-01-21 04:23:29

+0

textView.text = content.stringByReplacingOccurrencesOfString( 「

」,withString: 「\ r」) textView.text = content.stringByReplacingOccurrencesOfString( 「 」,withString:」「) – 2015-01-21 04:27:06

+0

但是有問題。您正在從原始的「內容」開始。文本視圖的文本被覆蓋,因爲_you_覆蓋它! – matt 2015-01-21 04:45:36

回答

5

由於@matt提到你正在從同一個content字符串開始。 stringByReplacingOccurrencesOfString方法實際上不會改變原始content字符串中的任何內容。它返回給您一個替換更改的新字符串,而content保持不變。

像這樣的東西應該爲你工作

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

我解決了它的基礎上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 
    } 
} 

例的想法:

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

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

結果,打印時:

newString:Hllo, stckovrflow

anotherString:stack

+2

這不是一個有效的解決方案,請使用CompareOptions.CompareOptions不規則表達式 – 2016-11-10 15:31:42

+0

@Michael但我想這在更通用的情況下工作。如果我的字符串不是正則表達式呢?你的答案如何改變? – 2017-08-31 11:47:56

+0

@KarthikKannan你是指下面的答案嗎?你有沒有評論錯誤的答案?如果是這樣,請在我的回答中重複這個問題,以避免混淆別人。 – 2017-08-31 16:08:11

10

使用replacingOccurrences用的String.CompareOptions.regularExpresion選項一起。

實施例(SWIFT 3):

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

輸入字符,而它們在方括號中被替換像這樣[\\性狀]

輸出:

7Hello, 7play7ground777 
+0

這真是太棒了,正是我在找的!正確使用RegEx,這在Swift中並沒有太多用處。感謝邁克爾的真棒回答。 – Trev14 2017-05-04 22:55:03

+0

你能解釋一下 - 我應該總是使用'.regularExpression'嗎?如果我只需要指定一個需要替換/刪除的具體符號列表,該怎麼辦? – 2017-10-17 09:31:36

+0

可能有其他方法,但是正則表達式是表示一組具體字符的好方法。例如,如果我想替換「A」,「B」和「Z」,代碼將如下所示:x.replacingOccurrences(of:「[ABZ]」,其中:「7」,options:.regularExpression,range :無) – 2017-10-17 13:46:48