<목차>
hasPrefix : 앞부분 문자열이 같은지 확인
hasSuffix : 뒷부분 문자열이 같은지 확인
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. hasPrefix : 특정 문자열로 시작하는지 확인할 수 있습니다
2. hasSuffix : 특정 문자열로 종료되는지 확인할 수 있습니다
*/
// [초기 문자열 데이터 선언 실시]
NSString *strData = @"https://test.com";
// [특정 문자열로 시작 및 종료하는지 확인]
bool isStartHttp = [strData hasPrefix:@"http"];
bool isStartNull = [strData hasPrefix:@"Null"];
bool isEndCom = [strData hasSuffix:@"com"];
bool isEndNull = [strData hasSuffix:@"Null"];
// [결과 출력 실시]
NSLog(@"[strData [원본] : %s]", strData.description.UTF8String);
NSLog(@"[startHttp [http 시작] : %d]", isStartHttp);
NSLog(@"[startNull [Null 시작] : %d]", isStartNull);
NSLog(@"[endCom [com 종료] : %d]", isEndCom);
NSLog(@"[endNull [Null 종료] : %d]", isEndNull);
}
// -----------------------------------------
@end
// -----------------------------------------
3. 문자열 맨 앞, 맨 뒤에 일치하는지 확인 결과
4. String을 구성하는 각 char를 표준식 조건에 해당되는지 모두 확인해보는 소스코드 예제
// 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: [프로토콜 메소드 호출 실시]
}
// 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() :: 테스트 메소드 수행]");
// [초기 변수 선언 실시]
NSString *strData = @"hello%^@ 사자2k ㅎㅎ!#$&TW*(O)K=+";
// [정규식 패턴 정의 실시]
NSString *pattern_1 = @"^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]$"; // 정규식 : 한글, 영어, 숫자만 허용 (공백, 특수문자 제거)
NSString *pattern_2 = @"^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9\\s]$"; // 정규식 : 한글, 영어, 숫자, 공백만 허용 (특수문자 제거)
// [공백 + 특수 문자 제거 정규식 작성]
NSString *removeData_1 = @"";
@try {
// [for 문을 수행하면서 한글자씩 정규식 확인 실시]
for (int i=0; i<strData.length; i++){
// [substring 사용해 문자열 한글자씩 출력]
NSString *charAt = [strData substringWithRange:NSMakeRange(i, 1)];
// [데이터가 정규식 패턴을 만족하는지 체크]
NSRange checkPattern = [charAt rangeOfString:pattern_1 options:NSRegularExpressionSearch];
// [정규식 패턴을 만족하는 경우만 문자열 추가]
if (checkPattern.location != NSNotFound){
removeData_1 = [removeData_1 stringByAppendingString:charAt];
}
}
// [결과 출력]
NSLog(@"[원 본 : %@]", strData);
NSLog(@"[정규식 [공백 및 특수문자 제거] : %@]", removeData_1);
} @catch (NSException *exception) {
NSLog(@"[catch [name] :: %@]", exception.name);
NSLog(@"[catch [reason] :: %@]", exception.reason);
}
// [특수 문자 제거 정규식 작성]
NSString *removeData_2 = @"";
@try {
// [for 문을 수행하면서 한글자씩 정규식 확인 실시]
for (int i=0; i<strData.length; i++){
// [substring 사용해 문자열 한글자씩 출력]
NSString *charAt = [strData substringWithRange:NSMakeRange(i, 1)];
// [데이터가 정규식 패턴을 만족하는지 체크]
NSRange checkPattern = [charAt rangeOfString:pattern_2 options:NSRegularExpressionSearch];
// [정규식 패턴을 만족하는 경우만 문자열 추가]
if (checkPattern.location != NSNotFound){
removeData_2 = [removeData_2 stringByAppendingString:charAt];
}
}
// [결과 출력]
NSLog(@"[원 본 : %@]", strData);
NSLog(@"[정규식 [특수문자 제거] : %@]", removeData_2);
} @catch (NSException *exception) {
NSLog(@"[catch [name] :: %@]", exception.name);
NSLog(@"[catch [reason] :: %@]", exception.reason);
}
}
// -----------------------------------------
@end
// -----------------------------------------
5. String을 구성하는 각 char를 표준식 조건에 해당되는지 모두 확인해보는 실습 결과
6. String append, copy, lenght 확인 실습 소스코드
// 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: [프로토콜 메소드 호출 실시]
}
// 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() :: 테스트 메소드 수행]");
// [초기 변수 선언 실시]
NSString *oneData = @"Hello";
NSString *twoData = @"사자";
// [[1] : stringByAppendingString 문자열 결합]
NSString *totalData_1 = [oneData stringByAppendingString:twoData];
NSLog(@"[문자열 결합 [stringByAppendingString] :: %@]", totalData_1);
// [[2] : stringWithString 문자열 복사]
NSString *totalData_2 = [NSString stringWithString:totalData_1];
NSLog(@"[문자열 복사 [stringWithString] :: %@]", totalData_2);
// [[3] : length 문자열 길이 확인]
NSInteger strLength = [totalData_2 length]; // totalData_2.length 방식도 [가능]
NSLog(@"[문자열 길이 [strLength] :: %li]", (long)strLength);
}
// -----------------------------------------
@end
// -----------------------------------------
7. String append, copy, lenght 확인 실습 실행 결과