iOS 공부하는 감자

문자열 다루기 본문

Swift

문자열 다루기

DongTaTo 2022. 1. 31. 00:08
반응형

문자열 이어 붙이기

  • + 연산자
  • appending : 피연산자에 문자열을 이어 붙여서 새로운 문자열을 생성
  • append : 피연산 문자열에 직접 문자열을 추가

appending 메서드는 피연산 값이 변경되지 않으므로 side-effect가 없고,

append는 피연산 값이 직접 변경되기 때문에 side-effect가 발생한다.

 

 

 

문자열의 특정 index 부분 가져오기

let someString: String = "abcdef"
let n: Int = 3

// 1. String.Index를 통해 가져오기
let index: String.Index = someString.index(someString.startIndex, offsetBy: 3)
//let result: Character = someString[index]   // d


// 2. 문자열을 배열로 만든 후 가져오기
let stringToArray: [String.Element] = Array(someString)
let resul: String.Element = stringToArray[n]  // d

 

 

String.Index 사용하여 문자열 자르기

  1. 기준을 잡을 Index를 구한다. 
  2. String(문자열[자를 범위])
  3. let someString: String = "abcdefg"
    
    // startIndex부터 3만큼 떨어진 index
    let index: String.Index = someString.index(someString.startIndex, offsetBy: 3)
    
    // let result: String.SubSequence = someString[index...]  // "defg"
    let result: String = String(someString[index...])  // "defg"

 

 

문자열의 특정 부분을 Range<String.Index> 형태로 가져와서 사용하기

let someString: String = "abcdef"

// Range타입의 lowerBound는 하한선, upperBound는 상한선을 의미
if let range: Range<String.Index> = someString.range(of: "cd") {
    let someSubString: String.SubSequence = someString[..<range.lowerBound]
    print(someSubString) // "ab"
}

if let range: Range<String.Index> = someString.range(of: "cd") {
    let someSubString: String.SubSequence = someString[..<range.upperBound]
    print(someSubString) // "abcd"
}

 

 

문자열에서 숫자만 뽑아서 배열로 사용(저장)하기

// 문자열에서 숫자만 뽑아서 저장하기
//let string = "0kaksd020dk2kfj2123"

let someString = "0kaksd020dk2kfj2123"
var result: [Int] = []

// String 타입의 숫자와 공백이 있는 배열 생성
let numStringArray: [String] = someString.components(separatedBy: CharacterSet.decimalDigits.inverted)

// 생성된 배열을 forEach로 순환하며 옵셔널 바인딩을 통해 nil값 제거하고 append
numStringArray.forEach({
    if let number = Int(String($0)) {
        result.append(number)
    }
})
print(numStringArray) // ["0", "", "", "", "", "020", "", "2", "", "", "2123"]
print(result) // [0, 20, 2, 2123]

 

 

 

문자열에 포함된 숫자 제거하기

let someString: String = "0kaksd020dk2kfj2123"

// 문자열과 공백으로 이루어진 숫자 제거된 배열
let stringArray: [String] = someString.components(separatedBy: CharacterSet.decimalDigits)

// 숫자를 제거한 문자열
let result: String = stringArray.joined(separator: "")

print(stringArray) // ["", "kaksd", "", "", "dk", "kfj", "", "", "", ""]
print(result)      // kaksddkkfj

 

문자열을 숫자 기준으로 분리하여 배열로 받기

let someString: String = "12adb34adf43fad"

let result: [String.SubSequence] = someString.split(whereSeparator: {$0.isNumber})

print(result)  // ["adb", "adf", "fad"]

 

 

(숫자가 포함된) 문자열을 문자 기준으로 분리하여 배열로 받기

let someString: String = "12adb34adf43fad"

let result: [String.SubSequence] = someString.split(whereSeparator: {$0.isLetter})

print(result)  // ["12", "34", "43"]

 

 

 

 

 

 

 


Character 또는 String.Element 에서 사용 가능한 메서드

  • isASCII : ASCII 문자인지 확인하는 메서드
  • let someChar: Character = "A"
    
    someChar.isASCII  // true


  • asciiValue : ASCII값을 반환, 반환 타입이 Optional (아스키 값이 없는 경우 nil 반환)
  • let someChar: Character = "A"
    
    someChar.asciiValue  // Optional(65)


  • isWhitespace : 공백이나 다른 분리하는 문자인지 확인 👉 "\t"(탭), "\n"(줄바꿈) 등..
  • let someSpace: Character = " "
    let someTab: Character = "\t"
    let someNewLine: Character = "\n"
    
    someSpace.isWhitespace    // true
    someTab.isWhitespace      // true
    someNewLine.isWhitespace  // true


  • isLetter : 문자인지 확인
  • let someChar: Character = "a"
    let someInt: Character = "1"
    
    someChar.isLetter  // true
    someInt.isLetter   // false


  • isNumber : 숫자인지 확인
  • let someChar: Character = "a"
    let someInt: Character = "1"
    
    someChar.isNumber  // false
    someInt.isNumber   // true


  • wholeNumberValue : 정수인지 확인하고, 정수인 경우 Optional Int 타입으로 반환
  • let someChar: Character = "1"
    
    someChar.wholeNumberValue  // Optional(1)
  • isSymbol : 심벌인지 확인
  • let someChar: Character = "👍"
    
    someChar.isSymbol  // true
    someChar.isLetter  // false
  • isMathSymbol : 수학 기호 심볼인지 확인
  • let mathSymbol: Character = "+"
    let someSymbol: Character = "👍"
    
    mathSymbol.isMathSymbol  // true
    someSymbol.isMathSymbol  // false
  • isLowercase, isUppercase : 소문자, 대문자인지 확인
  • let someLower: Character = "a"
    let someUpper: Character = "A"
    
    someLower.isLowercase  // true
    someUpper.isUppercase  // true

 

반응형

'Swift' 카테고리의 다른 글

Swift) Choosing Between Structures and Classes  (0) 2023.01.30
Operation, OperationQueue (feat. GCD)  (0) 2022.12.28
Swift) Property Wrapper  (0) 2022.07.20
split() vs components()  (0) 2022.06.04