Swift:仅在开头删除字符串的特定字符

时间:2016-09-15 15:02:40

标签: ios swift string character

我正在寻找答案,但尚未找到答案,所以:

例如:我有一个像"#blablub"我想在开头删除#,我只需删除第一个字符。但是,如果我有一个字符串" ##### bla#blub"我只想在第一个字符串的开头删除所有#,我不知道如何解决。

我的目标是获得一个像这样的字符串" bla#blub",否则就可以轻松使用replaceOccourencies ......

我希望你能提供帮助。

5 个答案:

答案 0 :(得分:7)

Swift2

func ltrim(str: String, _ chars: Set<Character>) -> String {
    if let index = str.characters.indexOf({!chars.contains($0)}) {
        return str[index..<str.endIndex]
    } else {
        return ""
    }
}

Swift3

func ltrim(_ str: String, _ chars: Set<Character>) -> String {
    if let index = str.characters.index(where: {!chars.contains($0)}) {
        return str[index..<str.endIndex]
    } else {
        return ""
    }
}

用法:

ltrim("#####bla#blub", ["#"]) //->"bla#blub"

答案 1 :(得分:4)

var str = "###abc"

while str.hasPrefix("#") {
    str.remove(at: str.startIndex)
}

print(str)

答案 2 :(得分:3)

我最近构建了一个String扩展,它将从开头,结尾或两者中“清理”一个字符串,并允许你指定一组你想要删除的字符。请注意,这不会从String的内部删除字符,但扩展它来执行此操作会相对简单。 (NB使用Swift 2构建)

enum stringPosition {
    case start
    case end
    case all
}

    func trimCharacters(charactersToTrim: Set<Character>, usingStringPosition: stringPosition) -> String {
        // Trims any characters in the specified set from the start, end or both ends of the string
        guard self != "" else { return self } // Nothing to do
        var outputString : String = self

        if usingStringPosition == .end || usingStringPosition == .all {
            // Remove the characters from the end of the string
            while outputString.characters.last != nil && charactersToTrim.contains(outputString.characters.last!) {
                outputString.removeAtIndex(outputString.endIndex.advancedBy(-1))
            }
        }

        if usingStringPosition == .start || usingStringPosition == .all {
            // Remove the characters from the start of the string
            while outputString.characters.first != nil && charactersToTrim.contains(outputString.characters.first!) {
                outputString.removeAtIndex(outputString.startIndex)
            }
        }

        return outputString
    }

答案 3 :(得分:0)

无正则表达式的解决方案是:

func removePrecedingPoundSigns(s: String) -> String {
    for (index, char) in s.characters.enumerate() {
        if char != "#" {
            return s.substringFromIndex(s.startIndex.advancedBy(index))
        }
    }
    return ""
}

答案 4 :(得分:0)

从OOPer的回应开始的快速3扩展:

extension String {
    func leftTrim(_ chars: Set<Character>) -> String {
        if let index = self.characters.index(where: {!chars.contains($0)}) {
            return self[index..<self.endIndex]
        } else {
            return ""
        }
    }
}