【问题标题】:Iterate over a string to remove specific characters swift迭代字符串以快速删除特定字符
【发布时间】:2024-05-18 13:50:02
【问题描述】:

我有一个以 hh:mm:ss:ms 显示时间的字符串,我需要遍历该字符串并删除不需要的字符,然后在标签中显示。

例如,如果时间字符串是 00:25:30:00,我希望最终输出是 25:30,或者如果字符串是 00:25:00:30,它需要输出 25:00: 30

我有下面的代码,我认为它有效,直到我意识到我只想在两个零相邻时删除字符,所以不知道如何实现这一点。我正在自学编码,如果这是一个典型的菜鸟或愚蠢的问题,请道歉......

    var gTimeString = "00:25:30:00"
    var gTimeStringReduced = ""

//iterate over string and remove zeros
    for char in gTimeString {
        print("character = \(char)")
        if char != "0" {
            gTimeStringReduced.append(char)
            print("reduced: ", gTimeStringReduced)
        }
    }
//remove the colon from the end of the string
    for ch in gTimeStringReduced.dropLast() {
        print(ch)
        // `ch` is a Character. Use `String(ch)` if you need a String.
    }

我也刚刚意识到上面的代码总是会删除最后一个字符,不管它是否是冒号,这也没什么用!

感谢所有帮助!

【问题讨论】:

  • 如果是00:25:00:30,您还想要相同的结果吗?还是只在开始/结束处加倍00(即修剪)?
  • 啊不,如果它是 00:25:00:30 我想要 25:00:30
  • 如果你要在某些情况下同时删除前缀和后缀,你怎么知道01:30:10是hh:mm:ss而不是mm:ss:ms?

标签: swift string loops


【解决方案1】:

既然你总是删除"00:",如果它在开头,或者":00",如果它在结尾,让我们这样想:

虽然字符串以“00:”开头,但我们将其删除。
虽然字符串末尾有“:00”,但我们将其删除。

在代码中:

func trimmingZeroTime(str: String) {
    var text = str
    print("Initial: \(text)")
    while text.hasPrefix("00:") {
        text = String(text.dropFirst(3))
    }
    while text.hasSuffix(":00") {
        text = String(text.dropLast(3))
    }
    print("final: \(text)")
}

样本测试:

trimmingZeroTime(str: "00:25:30:00")
trimmingZeroTime(str: "00:25:00:30:00")
trimmingZeroTime(str: "00:00:25:00:30:00")
trimmingZeroTime(str: "00:00:25:00:00")

输出:

Initial: 00:25:30:00
final: 25:30
Initial: 00:25:00:30:00
final: 25:00:30
Initial: 00:00:25:00:30:00
final: 25:00:30
Initial: 00:00:25:00:00
final: 25

编辑:

由于作者指定其最终用途,我建议使用DateComponentsFormatter而不是手动解析。

【讨论】: