如何替换 iOS 中字符串中的字母数字值?

How to replace alphanumeric values in string in iOS?

我想替换 iOS 中字符串中除空格外的所有字母数字字符。任何紧凑的解决方案?

这是我最近的做法:

var strIn = "apple banana mushroom"
let a = (strIn).componentsSeparatedByString(" ")

var strReturn: NSString
for str in a {

    let str3 = "".stringByPaddingToLength((str as NSString).length, withString: "*", startingAtIndex: 0)
    strReturn = strReturn.stringByAppendingString(str3)
}

预期结果是:"****** ****** ********"

一个简单的版本可能是这样的:

let strIn = "apple banana mushroom"
let words = strIn.componentsSeparatedByString(" ")

var starred: [String] = []

for word in words {
    let stars = Array(count: word.characters.count, repeatedValue: "*").joinWithSeparator("")
    starred.append(stars)
}

let result = starred.joinWithSeparator(" ")

结果:

"***** ****** ********"

您可以将其设为扩展以便于使用:

extension String {
    var stars:String {
        let words = self.componentsSeparatedByString(" ")
        var starred: [String] = []
        for word in words {
            let stars = Array(count: word.characters.count, repeatedValue: "*").joinWithSeparator("")
            starred.append(stars)
        }
        return starred.joinWithSeparator(" ")
    }
}

let starred = "apple banana mushroom".stars

您也可以用 map 替换循环并生成某种怪物单行。效率高但可读性差,请自行决定使用:

extension String {
    var stars:String {
        return self.componentsSeparatedByString(" ").map { Array(count: [=12=].characters.count, repeatedValue: "*").joinWithSeparator("") }.joinWithSeparator(" ")
    }
}

let starred = "apple banana mushroom".stars

您可以使用 NSRegularExpression。

NSString *string = @"apple banana mushroom";
NSError *error = nil;
NSRegularExpression *regularEx = [NSRegularExpression regularExpressionWithPattern:@"abcdefghijklmnopqrstuvwxyz" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *newString = [regularEx stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
NSLog(@"%@", newString);

现在您可以向 NSRegularExpression 添加任何模式,例如正则表达式模式。

在 Swift 1.2 中回答:

var myString = "apple banana mushroom"
var error: NSError?
let internalExpression = NSRegularExpression(pattern: "[a-z][0-9]*", options: .CaseInsensitive, error: &error)
if (!error){
 let replacedString = internalExpression .stringByReplacingMatchesInString(myString, options: NSMatchingOptions.fromMask(0), range: NSMakeRange(0, countElements(myString)), withTemplate: "*")
}

您无需将字符串拆分为数组,然后再次将所有数组追加为完整的字符串。

你可以轻松做到:

var strIn = "apple banana mushroom"

for tempChar in strIn.unicodeScalars {
   if tempChar != " "{
      strIn = strIn.stringByReplacingOccurrencesOfString(String(tempChar), withString: "*")
   }
}

Result:***** ****** ********

最简单的方法是使用正则表达式:

let strIn = "apple banana mushroom"

// reg exp matching everything that is not a whitespace character
let regExp = try! NSRegularExpression(pattern: "[^\s]", options: NSRegularExpressionOptions())
let strOut = regExp.stringByReplacingMatchesInString(
    strIn,
    options: NSMatchingOptions(),
    range: NSMakeRange(0, strIn.characters.count),
    withTemplate: "*"
)

print("\(strOut)")

还有一个简单的版本使用String.characters.map:

let mappedChars = strIn.characters.map({ [=11=] == " " ? [=11=] : "*" })
let strOut = String(mappedChars)
print("\(strOut)") 

(如果您想添加不同的白色 space 字符,您可以用任何更复杂的检查甚至函数替换 ==

如果您还想用单个 space 替换多个 space,我建议您单独进行。