例如)
var str = "ABCDEF"
let result = str.someMethod("B")
result[0] // "A"
result[1] // "B"
result[2] // "CDEF"
let result2 = str.someMethod("A")
result2[0] // "A"
result2[1] // "BCDEF"
var str2 = "BBBAAA"
let result3 = str2.someMethod("B")
result3[0] // "B"
result3[1] // "B"
result3[2] // "B"
result3[3] // "AAA"
var str3 = "BABBCDEDBB"
let result4 = str3.someMethod("B")
result4[0] // "B"
result4[1] // "A"
result4[2] // "B"
result4[3] // "B"
result4[4] // "CDED"
result4[5] // "B"
result4[6] // "B"
我怎么能?
此方法是一个稍微不同的组件(separateBy:)
也许它应该这样工作
答案 0 :(得分:1)
尝试使用以下方法,
func someMethod(input: String, fullString: String) -> [String] {
var array: [String] = []
var string:String = ""
for (index, char) in fullString.enumerated() {
if String(char) == input {
if string != "" {
array.append(string)
string = ""
}
array.append(input)
} else {
string.append(char)
if index == fullString.count-1 {
array.append(string)
}
}
}
return array
}
并按照这种方式调用,
let str = "BABBCDEDBB"
let result = someMethod(input: "B", fullString: str)
print(result)
您将获得以下输出
["B", "A", "B", "B", "CDED", "B", "B"]
答案 1 :(得分:1)
这是一个完整的答案,写为select CONCAT(firstname," ",lastname) as Name from Patient
扩展名。此解决方案符合您列出的所有需求,还可以处理您传递多字符搜索的情况。
String
输出:
ABCDEF中的B - > [" A"," B"," CDEF"]
BBBAAA中的B - > [" B"," B"," B"," AAA"]
BABBCDEDBB中的B - > [" B"," A"," B"," B"," CDED"," B"," B"]
ABCDEF中的A - > [" A"," BCDEF"]
BABBCDEDBB中的BB - > [" BA"," BB"," CDED"," BB"]
答案 2 :(得分:0)
试试这个,它适用于字符串和字符
func getResult(input:String, separator:String)->[String]{
var arr = input.components(separatedBy: separator)
var newArray = [String]()
var count = 0
while count < arr.count {
if let lastObj = newArray.last{
if lastObj == separator{
newArray.append(arr[count] == "" ? separator : arr[count])
}else{
if arr[count] == ""{
newArray.append(separator)
}else{
newArray.append(separator)
newArray.append(arr[count] == "" ? separator : arr[count])
}
}
}else{
newArray.append(arr[count] == "" ? separator : arr[count])
}
count += 1
}
return newArray
}
print(getResult(input: "ABCABDEA", separator: "AB"))
print(getResult(input: "ABCABDEA", separator: "A"))
[“AB”,“C”,“AB”,“DEA”]
[“A”,“BC”,“A”,“BDE”,“A”]
答案 3 :(得分:0)
我想我终于得到了你需要的问题:拆分字符串并保留分隔符。您可以通过一个不错的String
扩展程序实现此目的:
extension String {
func splitAndKeep(separator: Character) -> [String] {
let separatorIndexes = enumerated().flatMap { $0.1 == separator ? index(startIndex, offsetBy: $0.0) : nil }
let separatorRangeIndexes = separatorIndexes.flatMap { [$0, index(after: $0)] }
let splitIndexes = [startIndex] + separatorRangeIndexes + [endIndex]
let splitRangesEnds = zip(splitIndexes, splitIndexes.dropFirst()).filter { $0.0 < $0.1 }
return splitRangesEnds.map { String(self[$0.0..<$0.1]) }
}
}
splitAndKeep
逐步计算构建要使用的组件数组所需的信息。
用法:
print("ABCDEF".splitAndKeep(separator: "B"))
// ["A", "B", "CDEF"]
print("ABCDEF".splitAndKeep(separator: "A"))
// ["A", "BCDEF"]
print("BBBAAA".splitAndKeep(separator: "B"))
// ["B", "B", "B", "AAA"]
print("BABBCDEDBB".splitAndKeep(separator: "B"))
// ["B", "A", "B", "B", "CDED", "B", "B"]