2012-01-21 6 views
16

NSString의 특정 인덱스에서 문자를 바꿀 수있는 방법을 찾고 있습니다. 예를 들어NSString에서 특정 인덱스의 문자 바꾸기

: myString = @"******";

내가 "A"와 3 "*"를 대체 할 문자열은 다음과 같습니다 있도록 : myString = @"**A***";

어떻게 이것을 달성 할 수 있습니까?

미리 감사드립니다.

+1

가능한 복제 http://stackoverflow.com/questions/7940104/replace-character-in-string – Emil

+0

이 링크로 시도해 볼 수 있습니다. 그것은 당신이 가지고있는 것과 같은 문제를 가지고 있습니다. http://www.iphonedevsdk.com/forum/iphone-sdk-development/76235-nsstring-how-replace-character-certain-index.html – Sarah

답변

25

이 함께보십시오 : 물론

char *str = (char *)[myString UTF8String]; 
str[2] = 'A'; 
myString = [NSString stringWithUTF8String:str]; 

당신이 mystring에이 적어도이 있는지 반드시 확인해야한다 : 당신은 약간의 C를 사용하여 괜찮다면,이 같은 것을 사용

NSString *str = @"*******"; 
str = [str stringByReplacingCharactersInRange:NSMakeRange(3, 1) withString:@"A"]; 
NSLog(@"%@",str); 
18

정말로 두 가지 옵션이 있습니다.

NSString은 읽기 전용이므로 실제로 변경할 수있는 NSMutableString을 가져 오려면 mutableCopy을 NSString에 호출해야하며 NSMutableString에서 replaceCharactersInRange:withString:을 호출하여 문자를 대체해야합니다. 문자열을 두 번 이상 변경하려는 경우 더 효율적입니다.

문자가 대체 된 새 NSString을 반환하는 NSString에 stringByReplacingCharactersInRange:withString: 메서드가 있습니다. 이것은 단일 변경에 더 효율적일 수 있지만 각 대체에 대해 새 NSString을 만들어야합니다.

+0

그 일을 해줘서 고마워! 나는 내 문제를 해결했다! – niclas

1

이 작업을 수행하기 전에 3자를 입력하십시오. 그 외에는 이와 같이 뭔가를하는 것이 매우 빠르고 효율적입니다. 당신의 문자열이 "테스트"경우

+0

iOS에서는 작동하지만 MacOS에서는 작동하지 않습니다. 나는 MacOS가 새로 할당 된 문자열을 반환한다고 믿는다. – Borzh

4

이 샘플 방법

-(NSString *)string:(NSString*)string ByReplacingACharacterAtIndex:(int)i byCharacter:(NSString*)StringContainingAChar{ 

    return [string stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:StringContainingAChar]; 

} 

을 시도하고 당신은 호출 방법

[self string:yourString ByReplacingACharacterAtIndex:0 byCharacter:@"?"] 

실행하고 이동보다 "*"첫 번째 문자 "t이"로 대체해야합니다

0

신속한 응답으로 내 답변 :

extension NSString{ 

    func replacingACharacterAtIndex(pIndex : Int, pChar : Character) -> NSString{ 

     return self.stringByReplacingCharactersInRange(NSRange(location: pIndex, length: 1), withString: String(pChar)) 
    } 
}