NSString에서 영숫자가 아닌 문자 제거
.NET Framework에서 영숫자가 아닌 문자를 제거하는 빠르고 쉬운 방법을 찾고 NSString있습니다. 아마도를 사용하는 NSCharacterSet것이지만 피곤하고 문자열에 영숫자 문자 만 포함하는 문자열을 반환하는 것은 없습니다.
분할 한 다음 결합하여이를 수행 할 수 있습니다. 구성 요소에 대해 OS X 10.5 이상이 필요합니다 .SeparatedByCharactersInSet :
NSCharacterSet *charactersToRemove = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSString *strippedReplacement = [[someString componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""];
Swift에서는 componentsJoinedByString로 대체 join(...)되었으므로 여기서는 영숫자가 아닌 문자를 공백으로 대체합니다.
let charactersToRemove = NSCharacterSet.alphanumericCharacterSet().invertedSet
let strippedReplacement = " ".join(someString.componentsSeparatedByCharactersInSet(charactersToRemove))
Swift2의 경우 ...
var enteredByUser = field.text .. or whatever
let unsafeChars = NSCharacterSet.alphanumericCharacterSet().invertedSet
enteredByUser = enteredByUser
.componentsSeparatedByCharactersInSet(unsafeChars)
.joinWithSeparator("")
예를 들어 한 문자 만 삭제하려면 모든 반환 삭제 ...
enteredByUser = enteredByUser
.componentsSeparatedByString("\n")
.joinWithSeparator("")
내가 한 일은 NSCharacterSet과 -invertedSet내가 찾은 메소드를 만드는 것이 었습니다 (문서 읽기 능력을 위해 여분의 수면 시간이 무엇을하는지 궁금합니다). 다음 someString은 영숫자가 아닌 문자를 제거하려는 문자열 이라고 가정하는 코드 스 니펫입니다 .
NSCharacterSet *charactersToRemove =
[[ NSCharacterSet alphanumericCharacterSet ] invertedSet ];
NSString *trimmedReplacement =
[ someString stringByTrimmingCharactersInSet:charactersToRemove ];
trimmedReplacement그러면 someString의 영숫자가 포함됩니다 .
수락 된 답변의 Swift 3 버전 :
let unsafeChars = CharacterSet.alphanumerics.inverted
let myStrippedString = myString.components(separatedBy: unsafeChars).joined(separator: "")
정리 카테고리
나는 메서드 호출을 stringByStrippingCharactersInSet:하고 stringByCollapsingWhitespace그건 그냥 드롭 인 것이 편리 할 수 있습니다.
@implementation NSString (Cleanup)
- (NSString *)clp_stringByStrippingCharactersInSet:(NSCharacterSet *)set
{
return [[self componentsSeparatedByCharactersInSet:set] componentsJoinedByString:@""];
}
- (NSString *)clp_stringByCollapsingWhitespace
{
NSArray *components = [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]];
return [components componentsJoinedByString:@" "];
}
@end
다음은 Cameron 카테고리 의 확장 기능인 Swift 버전입니다 .
extension String {
func stringByStrippingCharactersInSet(set:NSCharacterSet) -> String
{
return (self.componentsSeparatedByCharactersInSet(set) as NSArray).componentsJoinedByString("")
}
func stringByCollapsingWhitespace() -> String
{
var components:NSArray = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
let predicate = NSPredicate(format: "self <> ''", argumentArray: nil)
components = components.filteredArrayUsingPredicate(predicate)
return components.componentsJoinedByString(" ")
}
}
평범한 사이클은 내가 생각하는 실행 시간이 더 빠를 것입니다.
@implementation NSString(MyUtil)
- (NSString*) stripNonNumbers {
NSMutableString* res = [NSMutableString new];
//NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet];
for ( int i=0; i < self.length; ++i ) {
unichar c = [self characterAtIndex:i];
if ( c >= '0' && c <= '9' ) // this looks cleaner, but a bit slower: [numericSet characterIsMember:c])
[res appendFormat:@"%c", c];
}
return res;
}
@end
이것은 제공된 답변보다 더 효과적인 방법입니다.
+ (NSString *)alphanumericString:(NSString *)s {
NSCharacterSet * charactersToRemove = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSMutableString * ms = [NSMutableString stringWithCapacity:[s length]];
for (NSInteger i = 0; i < s.length; ++i) {
unichar c = [s characterAtIndex:i];
if (![charactersToRemove characterIsMember:c]) {
[ms appendFormat:@"%c", c];
}
}
return ms;
}
또는 카테고리
@implementation NSString (Alphanumeric)
- (NSString *)alphanumericString {
NSCharacterSet * charactersToRemove = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSMutableString * ms = [NSMutableString stringWithCapacity:[self length]];
for (NSInteger i = 0; i < self.length; ++i) {
unichar c = [self characterAtIndex:i];
if (![charactersToRemove characterIsMember:c]) {
[ms appendFormat:@"%c", c];
}
}
return ms;
}
@end
참고URL : https://stackoverflow.com/questions/1656410/strip-non-alphanumeric-characters-from-an-nsstring
'Nice programing' 카테고리의 다른 글
| WCF가 보안되지 않거나 잘못 보안 된 오류 오류를 제공함 (0) | 2020.11.06 |
|---|---|
| LINQ를 사용하여 문자열에 숫자가 하나 이상 있는지 확인 (0) | 2020.11.06 |
| 하나의 UITableView 셀 / 행만 다시로드하고 애니메이션하는 방법은 무엇입니까? (0) | 2020.11.06 |
| Rails 3 : 오늘 날짜를 특정 시간대로 가져 오는 방법은 무엇입니까? (0) | 2020.11.06 |
| NSString에서 단일 NSString 문자를 얻는 방법 (0) | 2020.11.06 |