找出字符串是否具有特定位置的数字

时间:2018-02-22 15:28:46

标签: swift replace numbers letters

是否可以有一个字符串,例如:

var myText = "AB12CDE"

然后检查第3和第4个字母是否为数字,如果不是,则将其更改为数字。

因此,如果上述文本最终成为:

"ABIZCDE" 

我可以将IZ更改为12,但不能替换I和Z的所有实例,只能替换第3和第4个切割器。

6 个答案:

答案 0 :(得分:1)

就是这样:

let str = "ABCIZCDEZ"
var newString = ""
var index = 0
str.forEach { (char) in            
    var charToAppend = char
    if index == 3 || index == 4 {
        if char == "Z" {
            charToAppend = "2"
        }
        if char == "I" {
            charToAppend = "1"
        }
    }
    newString.append(charToAppend)
    index += 1
}

print(newString) // ABC12CDEZ

例如,对于插入,您可以进行扩展:

在课前的某处添加:

public extension String {
    public func insert(string: String, index: Int) -> String {
        return String(self.prefix(index)) + string + String(self.suffix(self.count - index))
    }
}

然后:

let str2 = "ABC2CDEZ"
var newString = str2.insert(string: "I", index: 3)
print(newString) // ABCI2CDEZ

答案 1 :(得分:0)

您可以尝试这样的事情:

首先,从位置 2 开始到下一个 2 点找到字符串的子字符串,然后检查它是否为整数。如果没有则用整数替换它。

var myText = "ABIZCDE"

        let myNSString = myText as NSString
        let subString = myNSString.substring(with: NSRange(location: 2, length: 2))

        print(subString)

        let isInt = Int(subString) != nil
        if !isInt {
            myNSString.replacingCharacters(in: NSRange(location: 2, length: 2), with: "12")
        }

        print(myNSString)

希望它有所帮助!!

答案 2 :(得分:0)

可能有更简单的替代方案,但以下方法可行:

onclick

或没有正则表达式:

$(document).ready(function () {
   $("#contactLink").on("click", function(){
     jQuery('#contactBx').toggleClass('hideMe');
   });
});

或将逻辑移到一起:

let myText = "ABIZCDEIZIZ"

let result = myText
    // replace any I at 3rd or 4th position with 1
    .replacingOccurrences(of: "(?<=^.{2,3})I", with: "1", options: .regularExpression)
    // replace any Z at 3rd or 4th position with 2
    .replacingOccurrences(of: "(?<=^.{2,3})Z", with: "2", options: .regularExpression)
print(result) // AB12CDEIZIZ

答案 3 :(得分:0)

所以我在操场上模拟了一些具有预期效果的东西,它还具有能够定义任意数量的替换规则的额外好处:

import Foundation

struct Substitution {

    var origin: String
    var result: String
    var targetIndices: [Int]
}

let subs = [
    Substitution(origin: "1", result: "I", targetIndices:[2, 3]),
    Substitution(origin: "2", result: "Z", targetIndices:[2, 3])
]

let charset = CharacterSet(charactersIn: subs.map({ $0.origin }).joined(separator: ""))

let input = "AB12CDE"

func process(_ input: String) -> String {

    var output = input

    for (index, character) in input.enumerated() {
        if let sub = subs.first(where: { $0.targetIndices.contains(index) && $0.origin == String(character) }) {
            output = (output as NSString).replacingCharacters(in: NSMakeRange(index, 1), with: sub.result)
        }
    }

    return output
}

let output = process(input)

答案 4 :(得分:0)

var str = "AB12CDE"
    let index1 = str.index (str.startIndex, offsetBy: 2)
    let index2 = str.index (str.startIndex, offsetBy: 3)
    print(str[index1],str[index2])
    if str[index1] == "1" && str[index2] == "2" {
        let newString = str.prefix(2) + "IZ" + str.dropFirst(5)
        print(newString)
    }

你可以试试这个。

答案 5 :(得分:0)

这列举了您可能想要用字母替换的字符的详尽列表,您可以添加更多字符:

extension Character {
    var alpabetNumber: Character? {
        switch self {
        case "I":
            return "1"
        case "Z":
            return "2"
        default:
            return nil
        }
    }
}

完成工作的职能:

extension String {
    mutating func namePlate() -> String {
        var index = 0
        self.forEach { (char) in
            if index == 2 || index == 3 {
                if let replacement = char.alpabetNumber {
                    self = replace(self, index, replacement)
                }
            }
            index += 1
        }
        return self
    }
}

// Helper
func replace(_ myString: String, _ index: Int, _ newChar: Character) -> String {
    var modifiedString = String()
    for (i, char) in myString.enumerated() {
        modifiedString += String((i == index) ? newChar : char)
    }
    return modifiedString
}

用法:

var str = "ABIZCDE"
str.namePlate() // "AB12CDE"