Objective-C (iOS): 文字列を扱う

Objective-C: StringViewController.h

#import <UIKit/UIKit.h>

@interface StringViewController : UIViewController

@end

Objective-C: StringViewController.m

#import "StringViewController.h"

@interface StringViewController ()

@end

@implementation StringViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSLog(@"%@", [self makeString1]);
    NSLog(@"%@", [self makeString2]);
    NSLog(@"%@", [self makeNumberString]);
    NSLog(@"%@", [self makeBooleanString]);
    NSLog(@"%@", [self makeYesOrNoString:YES]);
    NSLog(@"%@", [[self makeStringArray] description]);
    NSLog(@"%@", [[self makeStringArray2] description]);
    NSLog(@"%@", [[self processString] description]);
    NSLog(@"%@", [[self evaluateString] description]);
    NSLog(@"%@", [self concatenateString]);
    NSLog(@"%@", [self trimmString]);
    NSLog(@"%@", [self replaceString]);
    NSLog(@"%@", [self uppercaseString]);
    NSLog(@"%@", [self makeYesOrNoString:[self validateEmail:@"hogehoge@snippets.feb19.jp"]]);
    NSLog(@"%@", [self makeYesOrNoString:[self validateEmail:@"hogehoge.snippets.feb19.jp"]]);
    NSLog(@"%@", [self makeYesOrNoString:[self validatePhoneNumber:@"012-3456-7890"]]);
    NSLog(@"%@", [self makeYesOrNoString:[self validatePhoneNumber:@"0123-4-567890"]]);
    NSLog(@"%@", [self makeYesOrNoString:[self validateURL:@"http://snippets.feb19.jp"]]);
    NSLog(@"%@", [self makeYesOrNoString:[self validateURL:@"http:snippets.feb19.jp"]]);
}

// 静的な文字列
- (NSString *)makeString1
{
    NSString *string = @"文字列生成方法 1";
    return string;
}

// 変数を展開した文字列
- (NSString *)makeString2
{
    int num = 2;
    NSString *string = [NSString stringWithFormat:@"文字列生成方法 %d", num];
    return string;
}

// 数値 int から文字列への変換
- (NSString *)makeNumberString
{
    int integer = 3;
    NSString *string = [NSString stringWithFormat:@"%d", integer];
    return string;
}

// 論理値 BOOL から文字列 (0 または 1) への変換
- (NSString *)makeBooleanString
{
    BOOL boolean = NO;
    NSString *string = [NSString stringWithFormat:@"%d", boolean];
    return string;
}

// (便利関数) 論理値 BOOL から文字列 (YES / NO) への変換
- (NSString *)makeYesOrNoString:(BOOL)boolean
{
    NSString *string = boolean ? @"YES" : @"NO";
    return string;
}

// 文字列の配列
- (NSArray *)makeStringArray
{
    NSArray *strings = @[@"もじ", @"moji", @"MOJI"];
    return strings;
}

// 文字列の配列
- (NSArray *)makeStringArray2
{
    NSArray *strings = [NSArray arrayWithObjects:@"もじ2", @"moji2", @"MOJI2", nil];
    return strings;
}

// 文字列の一部を取り出す
- (NSArray *)processString
{
    NSString *string = @"元々の文字列";
    
    // 最初の 3 文字
    NSString *threeString = [string substringToIndex:3];
    
    // 3 文字目以降
    NSString *afterThirdString = [string substringFromIndex:3];
    
    // 3 文字目から 2 文字
    NSString *middleString = [string substringWithRange:NSMakeRange(3, 2)];
    
    return @[threeString, afterThirdString, middleString];
}

// 文字列の評価
- (NSArray *)evaluateString
{
    NSString *string = @"元々の文字列";
    
    // 文字列の最初(プレフィックス)が「元々の」という文字列かどうか。
    BOOL hasPrefix = [string hasPrefix:@"元々の"];
    
    // 文字列の最後(サフィックス)が「列」という文字列かどうか。
    BOOL hasSuffix = [string hasSuffix:@"列"];
    
    // 文字列の中に「文字」という文字列が有るかどうか。
    NSRange indexOf = [string rangeOfString:@"文字"];
    BOOL hasString;
    if (indexOf.location == NSNotFound) {
        // 無かった場合
        hasString = NO;
    } else {
        // 有った場合
        hasString = YES;
    }
    
    // 文字列の値が「元々の文字列」かどうか。
    // <注意>string == @"元々の文字列" ではない
    BOOL isValid = [string isEqualToString:@"元々の文字列"];
    
    return @[[self makeYesOrNoString:hasPrefix], [self makeYesOrNoString:hasSuffix], [self makeYesOrNoString:hasString], [self makeYesOrNoString:isValid]];
}

// email の形式がどうか正規表現を使った簡易的なバリデート
- (BOOL)validateEmail:(NSString *)candidate {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    
    return [emailTest evaluateWithObject:candidate];
}

// 電話番号の形式がどうか正規表現を使った簡易的なバリデート
- (BOOL)validatePhoneNumber:(NSString *)candidate {
    NSString *phoneNumberRegex = @"[0-9]{2,4}-[0-9]{2,4}-[0-9]{2,4}";
    NSPredicate *phoneNumberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneNumberRegex];
    
    return [phoneNumberTest evaluateWithObject:candidate];
}

// URL の形式がどうか正規表現を使った簡易的なバリデート
- (BOOL)validateURL:(NSString *)candidate {
    NSString *urlRegex = @"(http://|https://){1}[\\w\\.\\-/:]+";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegex];
    
    return [urlTest evaluateWithObject:candidate];
}

// 文字列を結合した文字列
- (NSString *)concatenateString
{
    NSString *string1 = @"元々の";
    NSString *string2 = @"文字列";
    NSString *string = [string1 stringByAppendingString:string2];
    return string;
}

// 文字列の一部(ホワイトスペースと改行文字)を取り除いた文字列
- (NSString *)trimmString
{
    NSString *string = @"  \n元々の文字列      ";
    
    NSString *trimmedString = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    
    return trimmedString;
}

// 文字列の一部を置き換えた文字列
- (NSString *)replaceString
{
    NSString *string = @"元々の文字列";
    NSString *afterString = [string stringByReplacingOccurrencesOfString:@"元々の" withString:@"新しい"];
    return afterString;
}

// 小文字を大文字に変換する
- (NSString *)uppercaseString
{
    NSString *string = @"default string";
    return [string uppercaseString];
}

// 大文字を小文字に変換する
- (NSString *)lowercaseString
{
    NSString *string = @"DEFAULT String";
    return [string lowercaseString];
}

@end

Output

2013-02-04 08:16:03.531 Snippets[26174:c07] 文字列生成方法 1
2013-02-04 08:16:03.533 Snippets[26174:c07] 文字列生成方法 2
2013-02-04 08:16:03.533 Snippets[26174:c07] 3
2013-02-04 08:16:03.534 Snippets[26174:c07] 0
2013-02-04 08:16:03.534 Snippets[26174:c07] YES
2013-02-04 08:16:03.535 Snippets[26174:c07] (
    "\U3082\U3058",
    moji,
    MOJI
)
2013-02-04 08:16:03.535 Snippets[26174:c07] (
    "\U3082\U30582",
    moji2,
    MOJI2
)
2013-02-04 08:16:03.535 Snippets[26174:c07] (
    "\U5143\U3005\U306e",
    "\U6587\U5b57\U5217",
    "\U6587\U5b57"
)
2013-02-04 08:16:03.536 Snippets[26174:c07] (
    YES,
    YES,
    YES,
    YES
)
2013-02-04 08:16:03.536 Snippets[26174:c07] 元々の文字列
2013-02-04 08:16:03.537 Snippets[26174:c07] 元々の文字列
2013-02-04 08:16:03.537 Snippets[26174:c07] 新しい文字列
2013-02-04 08:16:03.538 Snippets[26174:c07] DEFAULT STRING
2013-02-04 08:16:03.544 Snippets[26174:c07] YES
2013-02-04 08:16:03.545 Snippets[26174:c07] NO
2013-02-04 08:16:03.546 Snippets[26174:c07] YES
2013-02-04 08:16:03.546 Snippets[26174:c07] NO
2013-02-04 08:16:03.547 Snippets[26174:c07] YES
2013-02-04 08:16:03.548 Snippets[26174:c07] NO