如何在swift

时间:2018-03-15 05:16:20

标签: swift string

例如)

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:)

也许它应该这样工作

4 个答案:

答案 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"]