<목차>

 

length

upper, lower

NSLog %s %@

isEqual

String index로 부분 추출

String split

String replace

String stringByAppendingString

 

 

 

 

 

1. 사전 프로젝트 코드 세팅하고 오기

 

https://growingsaja.tistory.com/869

 

[Objective-C] 프로젝트 기본 세팅 소스코드 예시

1. AppDelegate 수정 with 설명 // vim AppDelegate.h #import // MARK: - [클래스 설명] /* // ----------------------------------------- 1. 애플리케이션 딜리게이트 (선언부) 2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생

growingsaja.tistory.com

 

 

 

 

 

2. 데이터 길이 측정 및 대문자화, 소문자화, 공백없애기 등 실습

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");
    
    /*
    // MARK: [요약 설명]
    1. uppercaseString : 문자열을 대문자로 반환해줍니다
    2. lowercaseString : 문자열을 소문자로 반환해줍니다
    3. whitespaceAndNewlineCharacterSet : 문자열 양끝 공백, 탭, 개행을 제거합니다
    */
    
    // [초기 문자열 데이터 선언 실시]
    NSString *strData = @" abc DEF ";
    
    // [대문자 및 소문자 데이터 변환 수행 실시]
    NSString *upperOnlyData = strData.uppercaseString;
    NSString *upperData = [strData.uppercaseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSString *lowerOnlyData = strData.lowercaseString;
    NSString *lowerData = [strData.lowercaseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSString *withoutSpaceData = [strData stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    
    // [결과 출력 실시]
    NSLog(@"[strData [원본 데이터] : %s]", strData.description.UTF8String);
    NSLog(@"[strData [원본 길이] : %lu]", (unsigned long)strData.description.length);
    NSLog(@"[upperOnlyData [대문자만인 데이터] : %s]", upperOnlyData.description.UTF8String);
    NSLog(@"[upperOnlyData [대문자만인 길이] : %lu]", (unsigned long)upperOnlyData.description.length);
    NSLog(@"[upperData [대문자 데이터] : %s]", upperData.description.UTF8String);
    NSLog(@"[upperData [대문자 길이] : %lu]", (unsigned long)upperData.description.length);
    NSLog(@"[lowerOnlyData [소문자만인 데이터] : %s]", lowerOnlyData.description.UTF8String);
    NSLog(@"[lowerOnlyData [소문자만인 길이] : %lu]", (unsigned long)lowerOnlyData.description.length);
    NSLog(@"[lowerData [소문자 데이터] : %s]", lowerData.description.UTF8String);
    NSLog(@"[lowerData [소문자 길이] : %lu]", (unsigned long)lowerData.description.length);
    NSLog(@"[withoutWhiteSpaceData [공백만 없앤 데이터] : %s]", withoutSpaceData.description.UTF8String);
    NSLog(@"[withoutWhiteSpaceData [공백만 없앤 길이] : %lu]", (unsigned long)withoutSpaceData.description.length);
}

    
// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

3. 데이터 길이 측정 및 대문자화, 소문자화, 공백없애기 등 실습 결과

 

 

 

 

 

 

4. String 포함 여부 확인해 출력 & %@와 %s를 활용한 String data 출력 방법 예시

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");

    /*
    // MARK: [요약 설명]
    1. rangeOfString location : 일치하는 문자열이 있으면 위치값을 반환해줍니다
    2. NSNotFound : 일치하는 문자열에 없을 경우 리턴되는 값입니다
    */
    
    
    // [초기 문자열 데이터 선언 실시]
    NSString *strData = @"Hello World!";
    NSLog(@"[strData [원본] : %s]", strData.description.UTF8String);
    NSLog(@"[strData [원본] : %@]", strData);
    
    
    // [특정 문자열 포함 여부 확인 수행 실시]
    if ([strData rangeOfString:@"hello"].location != NSNotFound){
        NSLog(@"[hello [포함 여부] : %@]", @"포함 됨");
    }
    else {
        NSLog(@"[hello [포함 여부] : %@]", @"포함이 되지 않음");
    }
    
    
    // [특정 문자열 포함 여부 확인 수행 실시]
    if ([strData rangeOfString:@"Hello"].location != NSNotFound){
        NSLog(@"[Hello [포함 여부] : %s]", "included");
    }
    else {
        NSLog(@"[Hello [포함 여부] : %s]", "not included");
    }
    
    
    // [특정 문자열 포함 여부 확인 수행 실시]
    if ([strData rangeOfString:@"World"].location != NSNotFound){
        NSLog(@"[World [포함 여부] : %@]", @"포함 됨");
    }
    else {
        NSLog(@"[World [포함 여부] : %@]", @"포함이 되지 않음");
    }
}

    
// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

5. String 포함 여부 확인해 출력 & %@와 %s를 활용한 String data 출력 실행 결과

 

 

 

 

 

 

6. String isEqual로 같은지 확인하는 코드

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");
    
    /*
    // MARK: [요약 설명]
    1. isEqual : NSData , NSDictionary , NSArrayNSString 에서 객체가 같은지 여부를 나타내는 bool 값을 반환합니다
    2. isEqual == true : 같은 객체입니다
    */
    
    // [초기 문자열 데이터 선언 실시]
    NSString *oneData = @"hello";
    NSString *twoData = @"hello";
    NSString *threeData = @"HEllo";
    
    
    // [비교 : oneData isEqual:twoData]
    if ([oneData isEqual:twoData] == true){
        NSLog(@"[oneData & twoData [isEqual] %s] \n", "같음");
    }
    else {
        NSLog(@"[oneData & twoData [isEqual] %s] \n", "다름");
    }
    
    
    // [비교 : oneData isEqual:threeData]
    if ([oneData isEqual:threeData] == true){
        NSLog(@"[oneData & threeData [isEqual] %s] \n", "같음");
    }
    else {
        NSLog(@"[oneData & threeData [isEqual] %s] \n", "다름");
    }
}

    
// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

7. String isEqual로 같은지 확인 결과 예시

 

 

 

 

 

 

8. String 문자열 특정 index 추출하기 소스 코드 예제

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");

    /*
    // MARK: [요약 설명]
    1. substringWithRange : 문자열에서 부분 문자열을 출력할 수 있습니다
    2. 문자열 인덱스는 0번 부터 시작합니다
    3. NSMakeRange(1, 8) : 인덱스 1번 문자열부터 시작해서 8개 문자를 출력합니다
    */
    
    // [초기 문자열 데이터 선언 실시]
    NSString *strData = @"!abcABC사자789";
    
    
    // [substringWithRange 사용해 부분 문자열 출력 실시]
    NSString *subOne = [strData substringWithRange:NSMakeRange(0, strData.length)];
    NSString *subTwo = [strData substringWithRange:NSMakeRange(1, 8)];
    NSString *subThree = [strData substringWithRange:NSMakeRange(2, 3)];
    NSString *subFour = [strData substringWithRange:NSMakeRange(3, 2)];
    
    
    // [결과 출력 실시]
    NSLog(@"[strData [원본] : %@]", strData);
    NSLog(@"[subOne [전체] : %@]", subOne);
    NSLog(@"[subTwo [1,8 = 1~8] : %s]", subTwo.description.UTF8String);
    NSLog(@"[subThree [2,3 = 2~4] : %s]", subThree.description.UTF8String);
    NSLog(@"[subFour [3,2 = 3~4] : %s]", subFour.description.UTF8String);
}

 

 

 

 

 

9. String 문자열 특정 index 추출하기 실습 결과

 

 

 

 

 

 

10. String Split 소스 코드

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");

    /*
    // MARK: [요약 설명]
    1. componentsSeparatedByString : 특정 문자 기준으로 문자열 자르기를 수행할 수 있습니다
    2. 자바에서 split 개념과 동일합니다
    */
    
    
    // [초기 문자열 데이터 선언 실시]
    NSString *strData = @"사자:호랑이:grow2:헤헤:뾰로롱";
    
    
    // [특정 문자 기준으로 문자열 자르기 실시]
    NSString *splitOne = [[strData componentsSeparatedByString:@":"] objectAtIndex:0];
    NSString *splitTwo = [[strData componentsSeparatedByString:@":"] objectAtIndex:1];
    NSString *splitThree = [[strData componentsSeparatedByString:@":"] objectAtIndex:2];
    
    NSString *splitFour = [[strData componentsSeparatedByString:@":"] objectAtIndex:3];
    NSString *splitFourMore = [[splitFour componentsSeparatedByString:@"헤"] objectAtIndex:1];
    
    
    // [결과 출력 실시]
    NSLog(@"[strData [원본] : %@]", strData);
    NSLog(@"[splitOne [0] : %s]", splitOne.description.UTF8String);
    NSLog(@"[splitTwo [1] : %s]", splitTwo.description.UTF8String);
    NSLog(@"[splitThree [2] : %s]", splitThree.description.UTF8String);
    
    NSLog(@"[splitFourMore [4.5] : %s]", splitFourMore.description.UTF8String);
}
    
// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

11. String Split 예제 결과

 

본 예시의 경우, 연속되는 "헤"를 기준으로 split했을땐 비어있는 String이 출력됨 또한 알 수 있습니다.

 

 

 

 

 

12. String replace를 통해 공백 없애기

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");

    /*
    // MARK: [요약 설명]
    1. stringByReplacingOccurrencesOfString : 특정 문자열을 다른 문자열로 변경할 수 있습니다
    2. 자바에서 replaceAll 개념과 동일합니다
    */
    
    
    // [초기 문자열 데이터 선언 실시]
    NSString *strData = @" 사자 Hello~ 뿜2 3!";
    
    
    // [특정 문자열 replaceAll 변경 수행 실시 : 공백 제거 수행 실시]
    NSString *replaceAll = [strData stringByReplacingOccurrencesOfString:@" " withString:@""];
    
    
    // [결과 출력 실시]
    NSLog(@"[strData [원본] : %@]", strData);
    NSLog(@"[strData [길이] : %lu]", (unsigned long)strData.length);
    NSLog(@"[replaceAll [공백제거] : %@]", replaceAll);
    NSLog(@"[replaceAll [공백제거] : %lu]", (unsigned long)replaceAll.length);
}
    
// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

13. String replace를 통해 공백 없앤 결과 예제

 

 

 

 

 

 

14. stringByAppendingString를 통해 2개의 String 합치기 예제

 

// fullName = "Hello" + "my bro~"
NSString* fullName = [@"Hello" stringByAppendingString:@"my bro~"];
NSLog(fullName);
// Hellomy bro~
        
        
NSString fullName2 = [favoriteList[2] stringByAppendingString:favoriteList[3]];

 

 

 

 

+ Recent posts