2016-09-28 56 views
0

我有這樣的擴展:這個函數從Swift中的字符串中提取hashtags有什麼問題?

extension String { 
    public func seperateHashtags(char : String) -> [String]{ 
     var word : String = "" 
     var words : [String] = [String]() 
     for chararacter in self.characters { 
      if String(chararacter) == char && word != "" { 
       words.append(word) 
       word = char 
      }else { 
       word += String(chararacter) 
      } 
     } 
     words.append(word) 
     return words 
    } 
} 

,我希望能在任何給定的文本得到的井號標籤的數組。 我有一個UITextView包含文本:

write anything here... #one #two three #four 

,我希望有一個輸出:

["one", "two", "four"] 

,但是當我這樣做:

print(myTextView.text.seperateHashtags("#")) 

我越來越:

["write anything here... ", "#one ", "#two three ", "#four"] 

我該如何解決這個問題?

+0

使用調試器。單步執行您的代碼。檢查變量。該功能不符合你的期望? –

回答

4

您可以使用正則表達式,並得到所有的井號標籤像這樣:

var hashtags = [String]() 
var str = "#one #two three #four" 
let regex = try NSRegularExpression(pattern: "(#[A-Za-z0-9]*)", options: []) 
let matches = regex.matchesInString(str, options:[], range:NSMakeRange(0, str.characters.count)) 
for match in matches { 
    print("match = \(match.range)") 
    hashtags.append(NSString(string: str).substringWithRange(NSRange(location:match.range.location + 1, length:match.range.length - 1))) 
} 

輸出:

["one", "two", "four"] 
+0

hm我只是把它粘貼到我的代碼和這行'let regex = try NSRegularExpression(pattern:「(# [A-Za-z0-9] *)「,options:[])'拋出一個錯誤,說:'從這裏拋出的錯誤沒有被處理......這裏有什麼問題? – user3766930

+0

你需要在'do catch'塊中加入。 –

+0

謝謝,它的作品完美! – user3766930

0
write anything here... 

不應該把它作爲UITextField的佔位符嗎?

+0

是的,但除此之外,我可以在那裏寫任何文本,我仍然認爲它被認爲是一個主題標籤... – user3766930