【问题标题】:How to get first four letters from string in Swift 3?如何在 Swift 3 中从字符串中获取前四个字母?
【发布时间】:2017-02-28 00:19:47
【问题描述】:

我正在尝试快速进行 IFSCCode 验证,但我面临的问题是我无法获取字符串中的前四个字母。

IFSC 代码示例:

ABCD0200000

这是 IFSC 代码的外观:

  1. IFSC 代码中的前四个字符始终是字母
  2. 第五个字符始终为零。
  3. 休息可以是任何东西
  4. IFSC 代码的长度不应大于或小于 11。长度应为 11。

我在 Objective C 中编写了 ifs 代码验证的代码,但我对 Swift 不太熟悉,因此在 Swift 中复制相同代码时遇到了问题。

以下是我用Objective C编写的代码:

- (BOOL)validateIFSCCode:(NSString*)ifsccode {
  if (ifsccode.length < 4) {
    return FALSE;
  }
  for (int i = 0; i < 4; i++) {
    if (![[NSCharacterSet letterCharacterSet]
            characterIsMember:[ifsccode characterAtIndex:i]]) {
      return FALSE;
    }
  }
  if (ifsccode.length < 10) {
    return FALSE;
  }
  if ([ifsccode characterAtIndex:4] != '0') {
    return FALSE;
  } else {
    return TRUE;
  }
}

在 Swift 3 中

func validateIfscCode(_ ifscCode : String) -> Bool{
    if(ifscCode.characters.count < 4){
        return false;
    }

    for( _ in 0 ..< 4){
        let charEntered = (ifscCode as NSString).character(at: i)
    }
    if(ifscCode.characters.count < 10){
        return false;
    }

    let idx = ifscCode[ifscCode.index(ifscCode.startIndex, offsetBy: 4)]

    print("idx:%d",idx)
    if (idx == "0"){
    }
    return true
}

【问题讨论】:

    标签: swift3


    【解决方案1】:

    获取所有子串的扩展

    extension String {
       func first(char:Int) -> String {
            return String(self.prefix(char))
        }
    
        func last(char:Int) -> String
        {
            return String(self.suffix(char))
        }
    
        func excludingFirst(char:Int) -> String {
            return String(self.suffix(self.count - char))
        }
    
        func excludingLast(char:Int) -> String
        {
             return String(self.prefix(self.count - char))
        }
     }
    

    【讨论】:

      【解决方案2】:

      获取字符串前缀的最简单方法是使用

      // Swift 3
      String(string.characters.prefix(4))
      
      // Swift 4 and up
      string.prefix(4)
      
      // Objective-C
      NSString *firstFour = [string substringToIndex:4];
      

      【讨论】:

      • 完美!谢谢
      • 我得到'无法将'String.SubSequence'(又名'Substring')类型的值分配给'String?''
      • @etayluz 如果您需要结果为String,那么您需要使用String(string.prefix(4)) 将子字符串转换为常规字符串。
      • 很棒的解决方案:)
      【解决方案3】:

      斯威夫特 5

      string.prefix(4)  // Replace 4 with number of letters you want to get from the string
      

      这适用于 Xcode 10.2

      【讨论】:

        【解决方案4】:

        这是一个使用正则表达式的简单验证。图案代表:

        • ^ 必须是字符串的开头
        • [A-Za-z]{4} = 四个字符 A-Z 或 a-z
        • 0一个零
        • .{6}六个任意字符
        • $ 必须是字符串的结尾

        更新到 Swift 4

        func validateIFSC(code : String) -> Bool {
          let regex = try! NSRegularExpression(pattern: "^[A-Za-z]{4}0.{6}$")
          return regex.numberOfMatches(in: code, range: NSRange(code.startIndex..., in: code)) == 1
        }
        

        PS:为了回答你的问题,你得到了 Swift 3 中的前 4 个字符

        let first4 = code.substring(to:code.index(code.startIndex, offsetBy: 4))
        

        在 Swift 4 中很简单

        let first4 = String(code.prefix(4))
        

        【讨论】:

        • 感谢@vadian 的解决方案
        猜你喜欢
        • 1970-01-01
        • 2012-07-11
        • 2014-01-26
        • 1970-01-01
        • 2016-01-04
        • 2011-09-18
        • 2014-06-08
        • 2017-05-23
        • 2022-12-20
        相关资源
        最近更新 更多