Swift :: NSScanner 사용예제

NSScanner로 문자열로부터 특정한 값 뽑아내기

이 문서는 Swift 4.2를 기준으로 수정되었습니다. NSScanner에 대한 Swift Foundation 대응 클래스인 Scanner 클래스가 새로 정의되었으며, CharacterSet에 대한 몇 가지 사용 방법이 변경되었습니다

  1. 스캔할 문자열을 넘겨서 Scanner 객체를 생성한다.
  2. 스캐너가 무시하고 지나가야 할 문자들이 있으면 CharacterSet 타입의 값으로 만들어서 charactersToBeSkipped 속성으로 지정한다.
  3. 자, 이제 스캔을 시작하지.

이때, 스캐너의 API는 예전 Objective-C API에서 크게 바뀌지 않은 관계로 포인터를 인자로 받고, 넘겨 받은 포인터가 가리키는 객체에 스캔한 값을 쓰게 된다.

Swift :: NSScanner 사용예제 더보기

NSScanner

http://nshipster.com/nsscanner/

문자열은 모든 곳에 있고 컴퓨팅의 여러 부분을 담당하고 있다. 이메일, 에세이, 시, 소설, 이 글도 그렇고 심지어 블로그의 코드도 모두 문자열로 되어 있다. 문자열을 쪼개고 특정한 부분을 추출해 내는 능력은 프로그래밍에서 강력한 무기가 될 수 있다. 코코아는 문자열을 쪼개고 합치는 다양한 방법을 제공하는데, 그 중 몇 가지 유명한 예를 들자면,

  • string.componentsSeparatedByCharactersInSet / string.componentsSeparatedByString : 문자열을 특정 토큰을 기준으로 잘라 배열로 쪼갠다.
  • NSRegularExpression : 정규식을 적용한다. 하지만 정규식은 복잡한 문자열에 대해서는 꽤나 번거롭기도 하거니와 많은 주의를 기울일 필요가 있다.
  • NSDataScanner : 문자열에서 주소, 날짜와 시간, URL 등을 추출해 내지만 정해진 포맷에 대해서만 사용할 수 있다는 제약이 있다.
  • NSScanner : 고도로 커스터마징이 가능한 문자열 스캔 클래스.

NSScanner는 문자열의 래퍼처럼 사용하고, 내부의 문자열을 탐색해서 효과적으로 부분문자열 집합이나 숫자값등을 추출해 낼 수 있다. 이 동작을 제어하는 몇 가지 프로퍼티를 살펴보자면,

  • caseInsensitive:Bool : 문자열을 탐색할 때 대소문자 구분을 무시할 것인지 여부
  • charactersToBeSkipped:NSCharacterSet : 탐색시 무시할 글자들을 정의한다.
  • scanLocation:Int : 스캐너의 현재 위치이다. 이 값을 조정하면 빨리감기/되감기 등을 할 수 있다.
  • locale:NSLocale : 문자열을 숫자값으로 바꿔낼 때 사용할 로케일 값이다.
NSScanner 더보기