我有一个名为source
的字符串。该字符串包含标签,在左侧和右侧标有数字标志(#)。如何获得特定分隔符之间的所有字符串?
什么是从源字符串中获取标签名称的最有效方法。 源字符串:
let source = "Here is tag 1: ##TAG_1##, tag 2: ##TAG_2##."
预期结果:
["TAG_1", "TAG_2"]
我有一个名为source
的字符串。该字符串包含标签,在左侧和右侧标有数字标志(#)。如何获得特定分隔符之间的所有字符串?
什么是从源字符串中获取标签名称的最有效方法。 源字符串:
let source = "Here is tag 1: ##TAG_1##, tag 2: ##TAG_2##."
预期结果:
["TAG_1", "TAG_2"]
不是一个很短的解决方案,但在这里你去:
let tags = source.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " ,."))
.filter { (str) -> Bool in
return str.hasSuffix("##") && str.hasPrefix("##")
}
.map { (str) -> String in
return str.stringByReplacingOccurrencesOfString("##", withString: "")
}
你可以阅读这篇文章,适应回答您需求: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知识。 请记住,如果这不能编译,那么你可能不得不稍微调整一下代码,因为我没有一个开发环境,我可以在发布之前测试它。
分割字符串在##
所有出现:
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"]
编号很快2。 – Ramis