2011-10-04 16 views
9

में अक्षरों को बदलें, मैं पिछले 4 को स्ट्रिंग में * के साथ सभी वर्णों को प्रतिस्थापित करने की कोशिश कर रहा हूं।
उद्देश्य-सी में एनएसएसटींग कक्षा replaceStringWithCharactersInRange: withString: में एक विधि है जहां मैं इसे (0,[string length]-4) रेंज @"*" के साथ दे दूंगा। यह वही करता है: 123456789 एबीसीडी * एबीसीडी में संशोधित किया गया है जबकि मैं ******** एबीसीडी बनाना चाहता हूं। मैं समझता हूं कि यह स्ट्रिंग ऑब्जेक्ट के साथ निर्दिष्ट रेंज को प्रतिस्थापित करता है। इसे कैसे पूरा करें?NSString

उत्तर

12
NSError *error; 

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d" options:NSRegularExpressionCaseInsensitive error:&error]; 

NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"]; 
+0

काम नहीं करता, स्ट्रिंग द्वारा * – ARC

+0

कोशिश 'प्रतिस्थापित हो जाता है @" \ d + "' 'अपने regularExpressionWithPattern के रूप में:' तर्क। मैंने इस रेगेक्स परीक्षक (http://regexpal.com/) पर \\ d + 'की कोशिश की, और यह असफल रहा, लेकिन' \ d + 'काम किया। –

+0

इसे फिक्स्ड। पैटर्न में \\ d + के साथ \\ d + को प्रतिस्थापित करें। बस याद रखें कि नियमित अभिव्यक्तियों को आईओएस 4 या बाद में आवश्यकता होती है। यदि आपको आईओएस 3 में काम करने की ज़रूरत है, तो आपको हमें एनएसएससीनर – Lefteris

0

स्ट्रिंग का पहला भाग प्राप्त करने के लिए आप [theString substringToIndex:[theString length]-4] का उपयोग कर सकते हैं और फिर दूसरे भाग के साथ [द स्ट्रिंग लम्बाई] -4 * के साथ गठबंधन कर सकते हैं। शायद उनकी यह करने के लिए एक आसान तरीका है ..

-1
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"]; 
[str1 replaceCharactersInRange:NSMakeRange(0, [str1 length] - 4) withString:@"*"]; 
NSLog(@"%@",str1); 

यह

+0

क्या आपने वास्तव में मेरे प्रश्न को पढ़ा या मेरे प्रश्न से उत्तर की प्रतिलिपि बनाई?मेरे द्वारा नीचे – ARC

+0

क्षमा करें, मैं सही ढंग से प्रश्न को समझ नहीं पा रहा हूं – Vitaliy

+0

NSMutableString * str1 = [[NSMutableString alloc] initWithString: @ "1234567890ABCD"]; एनएसआरेंज प्रतिस्थापन श्रेणी = एनएसएमकेरेंज (0, [str1 लंबाई] - 4); एनएसएमयूटेबलस्ट्रिंग * प्रतिस्थापन स्ट्रिंग = [[एनएसएमयूटेबलस्ट्रिंग आवंटन] init]; (uint i = 0; i Vitaliy

1

यह एक साधारण समस्या की तरह दिखता है ... पहले भाग स्ट्रिंग हो और संलग्न पिछले चार पात्रों के साथ इसे वापस काम करता है इसके लिए

-(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]]; 
} 
1

सबसे unintuitive हिस्सा कोको में अजीब पाशन के कुछ प्रकार के बिना दोहरा सितारों पैदा कर रही है:
यहाँ एक समारोह है कि जरूरत स्ट्रिंग रिटर्न है। stringByPaddingToLength:withString:startingAtIndex: आप अपनी पसंद के किसी भी लम्बाई के एक दोहराई जाने वाली स्ट्रिंग बनाने की अनुमति देता है, तो एक बार आपको लगता है कि है, यहाँ एक सरल उपाय है:

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; 
} 
-1

regexp iOS7 पर काम नहीं किया, लेकिन शायद यह मदद करता है:

- (NSString *)encryptString:(NSString *)pass { 

    NSMutableString *secret = [NSMutableString new]; 

    for (int i=0; i<[pass length]; i++) { 
     [secret appendString:@"*"]; 
    } 

    return secret; 
} 

अपने मामले में आपको पिछले 4 वर्णों को बदलने से रोकना चाहिए। बिट क्रूड, लेकिन काम पूरा हो गया

+0

यह सब एक स्ट्रिंग वापस करता है जो * 'डी आउट' है। यह सवाल का जवाब कैसे देता है? (अंतिम 4 छोड़कर?) –

+0

हम्म वास्तव में, पर्याप्त अच्छी तरह से पढ़ा नहीं था। (int i = 0; i <[pass length] - 4; i ++) { [गुप्त appendString: @ "*"]; } फिर अंतिम 4 वर्णों की प्रतिलिपि बनाने के लिए nsmakerange का उपयोग करें। लेकिन एक बेहतर जवाब पहले से ही है – CocoaChris

0

मुझे यकीन नहीं है कि स्वीकृत उत्तर क्यों स्वीकार किया गया था, क्योंकि यह केवल तभी काम करता है जब पिछले 4 लेकिन सबकुछ एक अंक है। यहाँ एक आसान तरीका है:

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);