Skip to content

Instantly share code, notes, and snippets.

@howenis
Forked from dsibilly/NSString+UsefulShit.h
Created March 6, 2014 05:24
Show Gist options
  • Save howenis/9383106 to your computer and use it in GitHub Desktop.
Save howenis/9383106 to your computer and use it in GitHub Desktop.
//
// NSString+UsefulStuff.h
//
// Duane Sibilly <duane@sibilly.com>
// 6/21/11
// Copyright (c) 2011-2012 Duane Sibilly. All rights reserved.
#import <Foundation/Foundation.h>
// The use of the parenthesis in the interface declaration is what tells the
// compiler that this is a category on the NSString class instead of a
// redefinition of NSString.
@interface NSString (UsefulStuff)
/**
+ (NSString*)stringTruncatedToWidth:withString:andFont:
Generates a truncated copy of the given NSString, truncated to the desired
width for the given typeface and size.
width - A CGFloat representing the desired width of the truncated NSString.
string - An NSString object with the content to be truncated.
font - A UIFont object representing the desired typeface and font size.
Example:
NSString *message = @"Can you hear this long-winded message?";
UIFont *messageFont = [UIFont fontWithName:@"Marker Felt" size:32];
NSString *output = [NSString stringTruncatedToWidth:48.0f
withString:message
andFont:messageFont];
Returns an NSString containing the truncated string, followed by an ellipsis.
*/
+ (NSString*)stringTruncatedToWidth:(CGFloat)width
withString:(NSString*)string
andFont:(UIFont*)font;
/**
+ (BOOL)stringIsPalindrome:
Deterines if a provided NSString is a palindrome.
aString - The NSString to be tested.
Example:
[NSString stringIsPalindrome:@"RADAR"]; // return YES
Returns a BOOL cooresponding to the NSString palindrome status.
*/
+ (BOOL)stringIsPalindrome:(NSString*)aString;
/**
- (NSString*)MD5Hash
Generates an MD5 cryptographic hash of this NSString's contents
Example:
NSString *hash = [@"The quick brown fox jumped over the lazy dog" MD5Hash];
Returns an NSString containing the hexidecimal representation of the MD5 hash.
*/
- (NSString*)MD5Hash;
/**
- (NSString*)truncateToWidth:withFont:
Generates an NSString truncated to the indicated width
for a given a typeface and size.
width - A CGFloat representing the desired width of the truncated NSString.
font - A UIFont object representing the desired typeface and font size.
Example:
NSString *testString = @"This string is too damn long!"
[testString truncateToWidth:64.0f
withFont:[UIFont fontWithName:@"Helvetica"
size:28]];
Returns an NSString containing the truncated string, followed by an ellipsis.
*/
- (NSString*)truncateToWidth:(CGFloat)width withFont:(UIFont*)font;
/**
- (BOOL)isPalindrome
Determines whether this string is a palindrome.
Example:
[@"HANNAH" isPalindrome]; // returns YES
[@"CLAUDE" isPalindrome]; // returns NO
Returns a BOOL corresponding to this NSString's palindrome status.
*/
- (BOOL)isPalindrome;
/**
-(NSString*)reverse
Reverses the contents of this NSString.
Example:
NSString *testString = @"stressed";
NSString *testReversed = [testString reverse]; // @"desserts"
Returns an NSString with the original NSString's contents reversed
*/
- (NSString*)reverse;
@end
//
// NSString+UsefulStuff.m
//
// Duane Sibilly <duane@sibilly.com>
// 6/21/11
// Copyright (c) 2011-2012 Duane Sibilly. All rights reserved.
#import "NSString+UsefulStuff.h"
#import <CommonCrypto/CommonDigest.h>
#define ELLIPSIS @"..."
@interface NSString (UsefulStuffPrivate)
+(BOOL) stringIsPalindrome:(NSString *)aString position:(NSInteger)position;
@end
@implementation NSString (UsefulStuff)
+(NSString*) stringTruncatedToWidth:(CGFloat)width withString:(NSString *)string andFont:(UIFont *)font
{
return [string truncateToWidth:width withFont:font];
}
+(BOOL) stringIsPalindrome:(NSString *)aString
{
return [NSString stringIsPalindrome:aString position:0];
}
+(BOOL) stringIsPalindrome:(NSString *)aString position:(NSInteger)position
{
NSString *_string = [NSString stringWithString:aString];
NSInteger _position = position;
if (! _string) {
return NO;
}
NSInteger stringLength = [_string length];
NSString *firstChar = [[_string substringToIndex:_position] substringToIndex:1];
NSString *lastChar = [[_string substringToIndex:(stringLength - 1 - _position)] substringToIndex:1];
if (_position > (stringLength / 2)) {
return YES;
}
if (! [firstChar isEqualToString:lastChar]) {
return NO;
}
return [NSString stringIsPalindrome:_string position:(_position + 1)];
}
-(NSString*) MD5Hash
{
// Create a C-style pointer to the UT8-encoded contents of the NSString
const char *pointer = [self UTF8String];
// Create a buffer array big enough to hold the digest
unsigned char buffer[CC_MD5_DIGEST_LENGTH];
// Create 16-byte MD5 hash value, store in buffer
// See: CC_MD5(3cc) manpage on OS X & iOS.
CC_MD5(pointer, strlen(pointer), buffer);
// Convert MD5 digest in buffer to an autoreleased NSString of hexidecimal
// values.
NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i += 1) {
[result appendFormat:@"%02x", buffer[i]];
}
return [result copy];
}
-(NSString*) truncateToWidth:(CGFloat)width withFont:(UIFont *)font
{
// Obtain a mutable copy of this NSString.
NSMutableString *truncatedString = [self mutableCopy];
// If this NSString is longer than the desired width, truncate.
if ([self sizeWithFont:font].width > width) {
// Subtract an ellipsis' worth of width from the desired width to obtain the
// truncation width.
width -= [ELLIPSIS sizeWithFont:font].width;
// While the string is longer than the truncation width, remove characters
// from the end of the string.
NSRange range = {truncatedString.length - 1, 1};
while ([truncatedString sizeWithFont:font].width > width) {
[truncatedString deleteCharactersInRange:range];
range.location -= 1;
}
// Once truncation is complete, append an ellipsis to the end of the string.
[truncatedString replaceCharactersInRange:range withString:ELLIPSIS];
}
return [truncatedString copy];
}
-(BOOL) isPalindrome
{
return [NSString stringIsPalindrome:self];
}
-(NSString*) reverse
{
NSMutableString *reversedString = [NSMutableString stringWithCapacity:[self length]];
for (int i = ([self length] - 1); i >= 0; i -= 1) {
[reversedString appendString:[NSString stringWithFormat:@"%C", [self characterAtIndex:i]]];
}
return reversedString;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment