This should be easy, but I'm having a hard time finding the easiest solution.
I need an NSString
that is equal to another string concatenated with itself a given number of times.
For a better explanation, consider the following python example:
>> original = "abc" "abc" >> times = 2 2 >> result = original * times "abcabc"
Any hints?
EDIT:
I was going to post a solution similar to the one by Mike McMaster's answer, after looking at this implementation from the OmniFrameworks:
// returns a string consisting of 'aLenght' spaces + (NSString *)spacesOfLength:(unsigned int)aLength; { static NSMutableString *spaces = nil; static NSLock *spacesLock; static unsigned int spacesLength; if (!spaces) { spaces = [@" " mutableCopy]; spacesLength = [spaces length]; spacesLock = [[NSLock alloc] init]; } if (spacesLength < aLength) { [spacesLock lock]; while (spacesLength < aLength) { [spaces appendString:spaces]; spacesLength += spacesLength; } [spacesLock unlock]; } return [spaces substringToIndex:aLength]; }
Code reproduced from the file:
Frameworks/OmniFoundation/OpenStepExtensions.subproj/NSString-OFExtensions.m
on the OpenExtensions framework from the Omni Frameworks by The Omni Group.
JavaScript String repeat() The repeat() method returns a string with a number of copies of a string. The repeat() method returns a new string. The repeat() method does not change the original string.
Here is the shortest version (Java 1.5+ required): repeated = new String(new char[n]). replace("\0", s); Where n is the number of times you want to repeat the string and s is the string to repeat.
Java has a repeat function to build copies of a source string: String newString = "a". repeat(N); assertEquals(EXPECTED_STRING, newString);
In Python, we utilize the asterisk operator to repeat a string. This operator is indicated by a “*” sign. This operator iterates the string n (number) of times. The “n” is an integer value.
There is a method called stringByPaddingToLength:withString:startingAtIndex:
:
[@"" stringByPaddingToLength:100 withString: @"abc" startingAtIndex:0]
Note that if you want 3 abc's, than use 9 (3 * [@"abc" length]
) or create category like this:
@interface NSString (Repeat) - (NSString *)repeatTimes:(NSUInteger)times; @end @implementation NSString (Repeat) - (NSString *)repeatTimes:(NSUInteger)times { return [@"" stringByPaddingToLength:times * [self length] withString:self startingAtIndex:0]; } @end
NSString *original = @"abc"; int times = 2; // Capacity does not limit the length, it's just an initial capacity NSMutableString *result = [NSMutableString stringWithCapacity:[original length] * times]; int i; for (i = 0; i < times; i++) [result appendString:original]; NSLog(@"result: %@", result); // prints "abcabc"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With