NSString을 분할하여 하나의 특정 부분에 액세스


142

다음 @"10/04/2011"과 같은 문자열이 있습니다. 다른 문자열에 "10"만 저장하고 싶습니다. 어떻게해야합니까?


1
가장 좋은 해결책은 NSDate와 NSDateFormatter를 사용하는 것입니다. 월 / 일 요일 / 월의 차이를 처리하기 위해 실제로 시스템에 코드를 추가하면 추가 크레딧 및 품질 코드가 향상됩니다.
EricLeaf

@EricLeaf 질문에서 문자열이 날짜라고 말하는 곳은 어디입니까?
JeremyP

답변:


376
NSArray* foo = [@"10/04/2011" componentsSeparatedByString: @"/"];
NSString* firstBit = [foo objectAtIndex: 0];

2018 년 7 월 3 일 업데이트 :

질문이 Swift 태그를 얻었 으므로이 작업을 수행하는 Swift 방법을 추가해야합니다. 그것은 매우 간단합니다.

let substrings = "10/04/2011".split(separator: "/")
let firstBit = substrings[0]

비록 그것은 당신에게 배열을 제공합니다 Substring. 이것을 다시 일반 문자열로 변환 해야하는 경우map

let strings = "10/04/2011".split(separator: "/").map{ String($0) }
let firstBit = strings[0]

또는

let firstBit = String(substrings[0])

1
[foo firstObject]빈 배열도 올바르게 처리하므로 일반적으로 사용하는 것이 좋습니다.
Bobrovsky

2
@Bobrovsky는 일반적인 경우 문자열인지 확인하여 날짜인지 확인하는 것이 좋습니다. 이것은 특정 질문에 대답하는 예일뿐입니다. 또한 세 개의 날짜 부분 중 하나를 얻는 것이 더 일반적입니다.
JeremyP

다수의 공언에도 불구하고 나는 동의하지 않는다. 첫째, 왜 10이 월이 아닌 하루라고 생각하십니까? 이런 종류의 잘못된 접근 방식은 Y2K 문제가 발생한 이유입니다.
EricLeaf

2
@EricLeaf 질문은 "10을 문자열로 저장하고 싶습니다"라고 말합니다. 변수를 무엇이든 호출 할 수있었습니다. 그 질문에 대한 답은 정답입니다. 사실, 질문이 날짜라고 말하는 곳은 없으므로 답변을 수정했습니다.
JeremyP

36

이 두 가지 중 하나 :

NSString *subString = [dateString subStringWithRange:NSMakeRange(0,2)];
NSString *subString = [[dateString componentsSeparatedByString:@"/"] objectAtIndex:0];

때로는 날짜 문자열의 형식이 잘못되어 있고 하루 (또는 그 문제에 대한 한 달)가 08이 아니라 8로 표시되므로 첫 번째 문자열은 두 가지 솔루션 중 최악 일 수 있습니다.

후자는 별도의 배열에 넣어야 반환되는 물건의 길이를 실제로 확인할 수 있으므로 어떤 소스에서든 날짜 문자열이 손상되었거나 유효하지 않은 경우 예외가 발생하지 않습니다.


맞습니다. subStringWithRange 메소드에서 두 번째 "S"는 "소문자"(substringWithRange)가 아니어야합니다. 그렇지 않으면 "이 메소드가 존재하지 않습니다"와 같은 오류가 발생합니다.
Marcos Reboucas

9

잘 작동합니다

NSString *dateString = @"10/10/2010";//Date 
NSArray* dateArray = [dateString componentsSeparatedByString: @"/"];
NSString* dayString = [dateArray objectAtIndex: 0];

8

목표 -c :

     NSString *day = [@"10/04/2011" componentsSeparatedByString:@"/"][0];

빠른:

     var day: String = "10/04/2011".componentsSeparatedByString("/")[0]


5

위에서 JeremyP가 제공 하는 멋진 솔루션을 아래의 일반적인 재사용 가능한 함수로 포맷했습니다 .

///Return an ARRAY containing the exploded chunk of strings
+(NSArray*)explodeString:(NSString*)stringToBeExploded WithDelimiter:(NSString*)delimiter
{
    return [stringToBeExploded componentsSeparatedByString: delimiter];
}

5
componentsSeparatedByString을 직접 사용하지 않는 이유는 무엇입니까?
John Gibb

1
여러 프로젝트에서 사용하기 때문에 변경 사항이 있으면 여러 위치 대신 래퍼 함수 본문을 변경하면됩니다. 그러나 한 번만 사용한다면 직접 사용하는 것이 더 합리적입니다 .
Khayrattee Wasseem 7

3
componentsSeparatedByString은 20 년 동안 바뀌지 않았습니다. 모든 Apple 메소드 호출이 변경 될 경우를 대비하여 랩핑합니까? 많이 입력해야합니다.
tooluser

1

스위프트 3.0 버전

let arr = yourString.components(separatedBy: "/")
let month = arr[0]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.