Próbuję zastąpić wszystkie znaki oprócz ostatnich 4 w ciągu znaków z *.
W funkcji-c istnieje metoda w klasie NSString replaceStringWithCharactersInRange: withString:
, w której chciałbym nadać jej zakres (0,[string length]-4)
) z ciągiem @"*"
. Oto, co robi: 123456789ABCD jest zmodyfikowany do * ABCD, podczas gdy ja chciałbym zrobić ABB ********. Rozumiem, że zastąpił on zakres określony przez obiekt ciągu. Jak to osiągnąć?Zastąp znaki w NSString
Odpowiedz
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
Możesz użyć [theString substringToIndex:[theString length]-4]
, aby uzyskać pierwszą część łańcucha, a następnie połączyć [długośćString] -4 * z drugą częścią. Może ich jest łatwiejszy sposób to zrobić ..
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
[str1 replaceCharactersInRange:NSMakeRange(0, [str1 length] - 4) withString:@"*"];
NSLog(@"%@",str1);
działa
Czy rzeczywiście przeczytałeś moje pytanie lub skopiowałeś odpowiedź z mojego pytania?obniżona przeze mnie – ARC
Niestety, nie rozumiem poprawnie tego pytania – Vitaliy
NSMutableString * str1 = [[NSMutableString alloc] initWithString: @ "1234567890ABCD"]; NSRange replacementRange = NSMakeRange (0, [str1 length] - 4); NSMutableString * replacementString = [[NSMutableString alloc] init]; dla (uint i = 0; i
To wygląda jak prostego problemu ... Get pierwszą część ciąg i powrócić go z ostatnich czterech znaków załączonych do tego.
Oto funkcja, która zwraca ciąg potrzebne:
-(NSString *)neededStringWithString:(NSString *)aString {
// if the string has less than or 4 characters, return nil
if([aString length] <= 4) {
return nil;
}
NSUInteger countOfCharToReplace = [aString length] - 4;
NSString *firstPart = @"*";
while(--countOfCharToReplace) {
firstPart = [firstPart stringByAppendingString:@"*"];
}
// range for the last four
NSRange lastFourRange = NSMakeRange([aString length] - 4, 4);
// return the combined string
return [firstPart stringByAppendingString:
[aString substringWithRange:lastFourRange]];
}
Najbardziej nieintuicyjne część w kakao jest tworzenie powtarzalnych gwiazdy bez jakiejś niewygodnej pętli. stringByPaddingToLength:withString:startingAtIndex:
pozwala tworzyć powtarzający się ciąg znaków o dowolnej długości chcesz, więc skoro masz, że oto proste rozwiązanie:
NSInteger starUpTo = [string length] - 4;
if (starUpTo > 0) {
NSString *stars = [@"" stringByPaddingToLength:starUpTo withString:@"*" startingAtIndex:0];
return [string stringByReplacingCharactersInRange:NSMakeRange(0, starUpTo) withString:stars];
} else {
return string;
}
RegExp nie działa na iOS7, ale być może to pomoże:
- (NSString *)encryptString:(NSString *)pass {
NSMutableString *secret = [NSMutableString new];
for (int i=0; i<[pass length]; i++) {
[secret appendString:@"*"];
}
return secret;
}
W twoim przypadku powinieneś przestać zastępować 4 ostatnie znaki. Trochę prymitywnie, ale wykonuje pracę
Wszystko to powoduje, że zwraca ciąg znaków, który jest * out. Jak to odpowiada na pytanie? (Pozostawiając ostatnie 4?) –
Hmm rzeczywiście, nie czytał wystarczająco dobrze. dla (int i = 0; i <[długość pasma] - 4; i ++) { [secret appendString: @ "*"]; } następnie użyj nsmakerange, aby skopiować 4 ostatnie znaki. Ale lepsza odpowiedź już tam jest – CocoaChris
Nie jestem pewien, dlaczego zaakceptowana odpowiedź została przyjęta, ponieważ działa tylko wtedy, gdy wszystko oprócz ostatniej 4 jest cyfrą. Oto prosty sposób:
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
NSRange r = NSMakeRange(0, [str1 length] - 4);
[str1 replaceCharactersInRange:r withString:[[NSString string] stringByPaddingToLength:r.length withString:@"*" startingAtIndex:0]];
NSLog(@"%@",str1);
- 1. Zastąp wszystkie znaki odstępu.
- 2. usuń określone znaki z NSString
- 3. Wykryj znaki Unicode w NSString na iPhonie
- 4. Zastąp wszystkie niesłowające się znaki, takie jak? * + #
- 5. Jak usunąć pierwsze 3 znaki z nsstring?
- 6. Zastąp wszystkie znaki niebędące cyframi pustą literą w łańcuchu znaków
- 7. Znaki, które muszą zostać zmienione w Objective-C NSString obiektu
- 8. Zastąp wszystkie znaki z wyjątkiem liter, cyfr, spacji i podkreśleń.
- 9. Zastąp znaki ciągiem, a następnie ustaw na widok tekstowy
- 10. Zastąp obiekt managedObjectModel w UIManagedDocument
- 11. FreeMarker? Zastąp wiele wartości
- 12. Zastąp w języku C# i zastąp wszystko w Javie
- 13. Zamień wystąpienia NSString - iPhone
- 14. Wyszukiwanie NSString w NSSet
- 15. NSString w UIWebview
- 16. Pozycja podłańcucha w NSString
- 17. Serwer SQL: Zastąp znaki inne niż znak w łańcuchu bez użycia tabeli tymczasowej.
- 18. Jak dołączyć NSString do innego NSString
- 19. Konwersja NSData do NSString!
- 20. Jak uzyskać jedną znak NSString z NSString
- 21. Global NSString
- 22. NSString parsowania
- 23. Drukowanie NSString
- 24. Zastąp symbolami wieloznacznymi w SQL
- 25. Zastąp brakujące wartości w SAS
- 26. Windows: Zastąp plik w użyciu
- 27. Zastąp elementy przekątnej w tablicy
- 28. Swift - Zastąp postać w łańcuchu
- 29. Zastąp zasoby w bibliotece Android
- 30. zastąp średnik przez znak nowej linii w kodzie Pythona
nie działa, ciąg zostaje zastąpiony przez '* – ARC
Try @ "\ d +"' 'regularExpressionWithPattern jako:' argument. Próbowałem '\\ d +' na [tym regex testerze] (http://regexpal.com/), ale to się nie udało, ale '\ d +' działało. –
Naprawiono. Wystarczy zastąpić \\ d + z \\ d we wzorcu. Pamiętaj tylko, że wyrażenia regularne wymagają systemu iOS 4 lub nowszego. Jeśli potrzebujesz go do pracy w systemie iOS 3, powinieneś nam NSScanner – Lefteris