//문자개수세기
NSLog (@"Length of str1 : %lu", [str1 length]);

//스트링복사하기
res = [NSString stringWithString : str1];

//스트링을다른스트링뒤에붙여복사하기
str2 = [str1 stringByAppendingString : str2];

//두개의스트링이같은지비교
if ([str1 isEqualToString : res] == YES)

//두개의스트링크기비교
NSComparisonResult compareResult;
compareResult = [str1 compare : str2];
if (compareResult == NSOrderedAscending)   // str1 < str2
if (compareResult == NSOrderedSame)   // str1 == str2

//대문자로변환
res = [str1 uppercaseString];
NSLog (@"Uppercase conversion : %s", [res UTF8String]);

//소문자로변환
res = [str1 lowercaseString];
NSLog (@"Lowercase conversion : %@",, res);

//스트링에서처음부터세번째까지문자추출하기
res = [str1 substringToIndex : 3];
NSLog (@"First 3 chars of str1 : %@", res);

//인덱스 5부터끝까지문자추출하기
res = [str1 substringFromIndex : 5];

//인덱스 8부터 13까지 (6개문자) 추출하기
res = [[str1 substringFromIndex : 8] substringToIndex : 6];

//동일한작업을쉽게하는방법
res = [str1 substringWithRange : NSMaskRange (8, 6)];

//스트링안에스트링찾기
NSRange subRange;
subRange = [str1 rangeOfString : @"string A"];
NSLog (@"String is at index %lu, length is %lu", subRange.location, subRange.length);
if (subRange.location == NSNotFound)  NSLog(@"String not found");

//수정불가능한스트링으로부터수정가능한스트링만들기
NSMutableString *mstr;
mstr = [NSMutableString stringWithString : str1];

//문자집어넣기
[mstr insertString : @"mutable" atIndex : 7];

//맨뒤에넣는경우병합하기
[mstr insertString : @"and string B" atIndex : [mstr length]];

//혹은 appendString 직접 사용
[mstr appendString : @"and string C"];

//범위로주어진서브스트링지우기
[mstr deleteCharactersInRange : NSMaskRange (16, 13)];

//스트링의범위찾아삭제하기
NSRange substr;
substr = [mstr rangeOfString : @"string B and "];
if (substr.location != NSNotFound)
[mstr deleteCharactersInRange  : substr];

// 수정가능한스트링직접설정하기
[mstr setString : @"This is string A"];

//특정범위를다른스트링으로대체하기, 8번째부터 8개의문자를해당문자로대체
//대체문자가길면스트링크기는늘어난다.
[mstr replaceCharactersInRange : NSMaskRange(8, 8) withString : @"a mutable string"];

//검색과대치
search = @"This is";
replace = @"An example of";
NSRange substr;
substr = [mstr rangeOfString : search];
if (substr.location != NSNotFound)
[mstr replaceCharactersInRange : substr withString : replace];

//모두찾아대치하기
search = @"a";
replace = @"X";

substr = [mstr rangeOfString : search];

while (substr.location != NSNotFound) {
[mstr replaceCharactersInRange : substr withString : replace];
substr = [mstr rangeOfString : search];
}

// 다른 방법 (전부 대치)
[mstr replaceOccurrencesOfString : search
withString : replace
options : nil
range : NSMaskRange (0, [mstr length])];

------------------------------------------------------------------------------------------------------------------------------------------------

#import <Foundation/NSString.h>
#import <Foundation/NSObject.h>
#import <Foundation/NSAutoreleasePool.h>
          
int main (int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   NSString *str = @"안녕하세요";
   NSRange strRange; // 범위를 나타내는 NSRange 구조체
   
   NSLog(@"%@", [str substringToIndex:3]); // 안녕하 (0번부터 2번까지)
   NSLog(@"%@", [str substringFromIndex:3]); // 세요 (3번부터 끝까지)
                  
   NSLog(@"%@", [str substringWithRange:NSMakeRange(1,3)]);
   // 녕하세 (1번부터 3개)
   // NSMakeRange() 함수로부터 NSRange 구조체가 리턴된다.
          
   NSLog(@"%@", [str substringWithRange:[str rangeOfString:@"녕하세"]]);
   // str 문자열에서 "녕하세"를 찾으면 location과 length 값이 설정된
   // NSRange 구조체가 리턴된다. 이는 바로 위에서 NSMakeRange(1,3) 함수가
   // 리턴한 값과 동일하다.
                  
   NSLog(@"%@", [[str substringFromIndex:1] substringToIndex:3]);
   // 이런 방법으로도 같은 값을 얻을 수 있다.
   // 인덱스 번호 1번을 0으로 놓고 2번까지 얻는다.
                  
   strRange = [str rangeOfString:@"녕하세"];
   NSLog(@"strRange.location=%lu strRange.length=%lu",
   strRange.location, strRange.length); // 1, 3 (구조체 멤버 변수)
                  
   strRange = [str rangeOfString:@"짜장면"];
   NSLog(@"%d", strRange.location); // -1, NSNotFound
          
   [pool drain];
   return 0;
}
          
           
#import <Foundation/Foundation.h> 
int main (int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
   NSString *str = @"홍길동"; // 수정 불가능한 문자열 객체 생성 
   NSString *immutaStr = [NSString stringWithString:str]; // 수정 불가능한 문자열 객체 생성 (깊은 복사) 
   NSMutableString *mutaStr = [NSMutableString stringWithString:str]; // 수정 가능한 문자열 객체 생성 (깊은 복사) 
   [mutaStr insertString:@" " atIndex:1]; // 1번에 삽입 
   NSLog(@"%@", mutaStr); // 홍 길동
   [mutaStr appendString:@" 반갑습니다"]; // 맨 끝에 추가 
   NSLog(@"%@", mutaStr); // 홍 길동 반갑습니다 
   [mutaStr deleteCharactersInRange:NSMakeRange(1,3)]; // 1번부터 3개 삭제 
   NSLog(@"%@", mutaStr); // 홍 반갑습니다 // 
   [mutaStr deleteCharactersInRange:[mutaStr rangeOfString:@" 길동"]]; // 이렇게 하면 원하는 문자열을 찾아서 바로 삭제할 수 있다. 
   [mutaStr replaceCharactersInRange:NSMakeRange(0,1) withString:@"김"]; 
   NSLog(@"%@", mutaStr); // 김 반갑습니다 
   [mutaStr setString:@"밥 먹으러 갑시다"]; 
   NSLog(@"%@", mutaStr); // 밥 먹으러 갑시다 
   [pool drain]; return 0; 
}