2016-06-30 29 views
-1

我有一个名为source的字符串。该字符串包含标签,在左侧和右侧标有数字标志()。如何获得特定分隔符之间的所有字符串?

什么是从字符串中获取标签名称的最有效方法。 源字符串:

let source = "Here is tag 1: ##TAG_1##, tag 2: ##TAG_2##." 

预期结果:

["TAG_1", "TAG_2"] 
+0

编号很快2。 – Ramis

回答

1

不是一个很短的解决方案,但在这里你去:

let tags = source.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " ,.")) 
    .filter { (str) -> Bool in 
     return str.hasSuffix("##") && str.hasPrefix("##") 
    } 
    .map { (str) -> String in 
     return str.stringByReplacingOccurrencesOfString("##", withString: "") 
    } 
0

你可以阅读这篇文章,适应回答您需求:Swift: Split a String into an array

如果没有,你也可以创建自己的方法,remem BER字符串是一个字符数组,所以你可以使用一个循环遍历并检查是否有“#”

let strLength = source.characters.count; 
var strEmpty = ""; 

for(var i=0; i < strLength; i++) 
{ 
    if(source[ i ] == '#') 
    { 
    var j=(i+2); 

    for(j; source[ (i+j) ] != '#'; j++) 
     strEmpty += source[ (i+j) ]; // concatenate the characters to another variable using the += operator 

    i = j+2; 
    // do what you need to with the tag 
    } 
} 

我更多的C++程序员比雨燕程序员,所以这是我会怎样如果我不想使用标准方法,就可以接近它。可能有更好的方法,但我没有任何Swift知识。 请记住,如果这不能编译,那么你可能不得不稍微调整一下代码,因为我没有一个开发环境,我可以在发布之前测试它。

1

分割字符串在##所有出现:

let components = source.components(separatedBy: "##") 
// Result: ["Here is tag 1: ", "TAG_1", ", tag 2: ", "TAG_2", "."] 

检查有奇数个组件,否则还有的##秒的奇量:

guard components.count % 2 == 1 else { fatalError("Unbalanced delimiters") } 

让每一个第二个元素:

components.enumerated().filter{ $0.offset % 2 == 1 }.map{ $0.element } 

在si ngle功能:

import Foundation 

func getTags(source: String, delimiter: String = "##") -> [String] { 
    let components = source.components(separatedBy: delimiter) 
    guard components.count % 2 == 1 else { fatalError("Unbalanced delimiters") } 
    return components.enumerated().filter{ $0.offset % 2 == 1 }.map{ $0.element } 
} 

getTags(source: "Here is tag 1: ##TAG_1##, tag 2: ##TAG_2##.") // ["TAG_1", "TAG_2"] 
相关问题