<목차>
length
upper, lower
NSLog %s %@
isEqual
String index로 부분 추출
String split
String replace
String stringByAppendingString
1. 사전 프로젝트 코드 세팅하고 오기
https://growingsaja.tistory.com/869
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]];