【问题标题】:SWIFT checking if a string begins with something but the second character can be anythingSWIFT 检查字符串是否以某些东西开头,但第二个字符可以是任何东西
【发布时间】:2020-03-18 19:38:44
【问题描述】:

我是使用 swift 的新手,所以我正在玩弄它,我试图弄清楚如何检查给定的字符串是否以单词“hello”开头,尽管第二个字母可以是它没有的任何东西'不必是 E,所以我可以输入 h0llo,它仍然会返回 true,这就是我想要实现的目标。

这是我目前所拥有的代码,但是它在测试中到处乱七八糟,所以在这个阶段对我来说任何帮助都是必要的。我只是添加代码,以便您可以更多地了解我正在尝试实现的目标

func check(_ givenString: String) -> Bool {
    var newString = givenString

    if newString.count > 2 {
        newString.remove(at: String.Index(encodedOffset: 2))
        if newString.hasPrefix("hello") {
            return true 
        } else {
            return false
        }
    }
}
print(check("h0llo"))

【问题讨论】:

  • 我会使用正则表达式。 Apple docs & NSHipster
  • 或者,为了学习,你可以检查三个条件 1.长度至少为5 2.第一个字母是"h" 3.范围2...4的子字符串是"llo".
  • @Sulthan 你能举个例子吗?抱歉,我是新手,所以只是想了解很多
  • 与您的问题无关,但String.Index(encodedOffset: 2) 是错误的。它只适用于常规字符(ascii)。并非所有字符都可以用单个字节表示。正确的方法是newString.remove(at: newString.index(newString.startIndex, offsetBy: 2))。如果您的意图是删除第二个字符,您可以简单地使用 index(after:) 方法 newString.remove(at: newString.index(after: newString.startIndex))

标签: ios swift swift-playground


【解决方案1】:

一个合理的解决方案是用正则表达式检查

func check(_ givenString: String) -> Bool {
    return givenString.range(of: "^h.llo", options: .regularExpression) != nil
}

插入符号^ 检查字符串的开头,点. 表示任何字符。

【讨论】:

  • 这是完美的谢谢。我无法正确回答您,因为我的帐户是新帐户,但非常感谢
  • @sls96 答案仅适用于原始问题的解决方案。评论非常适合对答案做出反应。此外,如果这解决了您的问题,请考虑通过单击复选标记接受答案。
猜你喜欢
  • 2010-12-18
  • 2012-06-04
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2014-05-12
  • 2012-03-06
  • 2018-12-27
相关资源
最近更新 更多