如何替换 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,我建议您单独进行。
我想替换 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,我建议您单独进行。