[Programming Language]/[Swift]

[Swift] 문자열(Strings), 문자열 내에 변수 출력 방법, 여러줄 문자열, 문자열 결합

Semincolon 2024. 7. 3. 17:46

1. 문자열 (Strings)

  문자열이란 큰따옴표("")로 둘러쌓인 문자의 연속으로 "Hello, Swift!" 같은 것들을 뜻한다. Swift에서는 큰 따옴표만 사용할 수 있고 작은 따옴표를 사용하면 오류가 발생한다.

let str = "Hello Swift!" // 'Hello Swift!'처럼 작은 따옴표를 사용하면 오류 발생

 

문자열은 String()를 사용해서도 만들 수 있다.

let str = String("Hello, Swift!")

 

1-1. 문자열 결합

  Swift도 Python과 동일하게 + 연산자를 사용하여 문자열을 결합할 수 있다. 또한 += 연산자 역시도 당연히 사용할 수 있다.

var str1 = "Hello"
var str2 = ", Swift!"

print(str1 + str2) // > Hello, Swift!


str1 += str2
print(str1) // > Hello, Swift!

 

또한 append() 메서드를 사용해서도 문자열을 결합할 수 있다.

var str1 = "Hello"

str1.append(", Swift!")
print(str1) // > Hello, Swift!

 

1-2. 여러줄 문자열

  큰 따옴표를 3개 연속으로 사용하여 여러줄 문자열을 나타낼 수 있다. 여러줄 문자열을 사용할 때 엔터를 입력하면 그대로 문자열에 반영이 되는데 엔터를 눌러도 줄바꿈이 되지 않도록 하고 싶다면 백슬래쉬(\)를 사용하면 된다.

var str1 = """
Hello,
Swift!
"""

var str2 = """
Hello, \
Swift!
"""

print(str1, "\n")
print(str2)

/* [결과]
Hello,
Swift! 

Hello, Swift!
*/

 

1-3. 특수 문자

  문자열 내에 특수 문자를 사용할 수 있다. 여기서 특수 문자라 함은 개행, 수평 탭, nil, 큰 따옴표, 작은 따옴표 등을 말한다.

  • \n : 개행(줄바꿈)
  • \t : 수평 탭
  • \0 : 값 없음
  • \" : 큰 따옴표
  • \" : 작은 따옴표
print("안녕하세요! \n반갑습니다 \t ^_^ \" \' ㅁ\0ㅁ")

/* [결과]
안녕하세요! 
반갑습니다 	 ^_^ " ' ㅁㅁ
*/

 

만약 문자열에서 이러한 특수 문자를 원래 형태 그대로 출력하고 싶다면 문자열의 시작 큰 따옴표와 끝 큰 따옴표에 # 문자를 붙여주면 된다. 이러한 문자열에서 다시 원래의 특수 문자 기능을 사용하고 싶으면 사용한 #의 개수만큼을 \#n처럼 사용해주면 된다. 시작 따옴표와 끝 따옴표에 사용한 # 문자의 개수는 일치해야 하며, 그렇지 않은 경우에는 오류가 발생한다.

print(#"안녕하세요 \n반갑습니다"#)
print()

print(#"안녕하세요 \#n반갑습니다"#)
print()

print(##"안녕하세요 \#n반갑습니다"##)
print()

print(##"안녕하세요 \##n반갑습니다"##)
print()

/* [결과]
안녕하세요 \n반갑습니다

안녕하세요 
반갑습니다

안녕하세요 \#n반갑습니다

안녕하세요 
반갑습니다
*/

 

1-4. for ~ in 문자열

  문자열은 for 반복문을 통해 각 문자에 대한 순회가 가능하다.

for c in "ABCDE" {
    print(c)
}

/* [결과]
A
B
C
D
E
*/

 

1-5. 문자열에 변수를 출력하는 방법

  문자열에 변수를 출력하기 위해선 큰 따옴표 내부에 \(변수명) 형태로 사용하면 된다. 변수 뿐만이 아니라 연산의 결과, 메서드의 사용 등도 얼마든지 가능하다.

let a = 3

print("a is", a)        // 기존의 이러한 형태를
print("a is \(a) \n")   // 이렇게 사용할 수 있다

print("3 + 5 = \(3+5)") // 연산의 결과도 사용할 수 있다

/* [결과]
a is 3
a is 3 

3 + 5 = 8
*/

 

1-6. count

  문자열의 길이를 확인하기 위해선 (문자열).count 형태로 사용하면 된다.

print("1".count)
print("11".count)
print("111".count)

/* [결과]
1
2
3
*/

 

1-7. 문자열의 인덱스 ❗️❗️

  Python에서는 문자열의 특정 자리 문자를 얻으려면 정수형 인덱스를 사용하면 된다. 그러나 Swift에서는 문자열의 인덱스가 정수형이 아니므로 새로운 형태로 사용해야 한다.

1-7-1. 문자열의 시작 인덱스(startIndex), 끝 인덱스(endIndex)

  문자열의 시작 인덱스는 startIndex로 사용할 수 있고 끝 인덱스는 endIndex로 사용할 수 있다. 그러나 endIndex는 문자열의 마지막 문자의 다음 위치를 나타내기 때문에 만약 문자열의 마지막 문자를 얻고 싶다면 문자열.index(before: 문자열.endIndex) 의 형태로 사용해야 한다.

let str: String = "Hello, Swift!"

print("첫 문자 : \(str[str.startIndex])")
print("끝 문자 : \(str[str.index(before: str.endIndex)])")

/* [결과]
첫 문자 : H
끝 문자 : !
*/

1-7-2. 문자열 내 각 문자의 전체 인덱스 탐색 방법

  indices를 사용하면 문자열의 전체 인덱스를 탐색할 수 있다.

let str: String = "Hello, Swift!"

for i in str.indices {
    print(str[i], i)
}

/* [결과]
H Index(_rawBits: 15)
e Index(_rawBits: 65799)
l Index(_rawBits: 131335)
l Index(_rawBits: 196871)
o Index(_rawBits: 262407)
, Index(_rawBits: 327943)
  Index(_rawBits: 393479)
S Index(_rawBits: 459015)
w Index(_rawBits: 524551)
i Index(_rawBits: 590087)
f Index(_rawBits: 655623)
t Index(_rawBits: 721159)
! Index(_rawBits: 786695)
*/

1-7-3. 문자열 내 특정 위치의 문자에 접근하는 방법

  Swift에서 문자열 내 특정 위치의 문자를 얻는 과정은 Python만큼 간단하지는 않다. 형태는 다음과 같다.

  • 문자열.index(문자열.startIndex, offsetBy: 위치)
let str: String = "Hello, Swift!"

print(str[(str.index(str.startIndex, offsetBy: 0))])
print(str[(str.index(str.startIndex, offsetBy: 1))])
print(str[(str.index(str.startIndex, offsetBy: 2))])
print(str[(str.index(str.startIndex, offsetBy: 3))])
print(str[(str.index(str.startIndex, offsetBy: 4))])
print(str[(str.index(str.startIndex, offsetBy: 5))])
print(str[(str.index(str.startIndex, offsetBy: 6))])
print(str[(str.index(str.startIndex, offsetBy: 7))])
print(str[(str.index(str.startIndex, offsetBy: 8))])
print(str[(str.index(str.startIndex, offsetBy: 9))])
print(str[(str.index(str.startIndex, offsetBy: 10))])
print(str[(str.index(str.startIndex, offsetBy: 11))])
print(str[(str.index(str.startIndex, offsetBy: 12))])

/* [결과]
H
e
l
l
o
,

S
w
i
f
t
!
*/

 

1-8. 특정 인덱스에 문자 삽입 또는 삭제

  위에서 언급한 방법을 활용하여 특정 인덱스에 새로운 문자를 추가하거나, 특정 인덱스의 문자를 삭제할 수 있다.

  • 문자열.insert(삽입할 문자, at: 삽입할 인덱스)
  • 문자열.remove(at: 삭제할 인덱스)
var str: String = "Hello, Swift!"

str.remove(at: str.index(str.startIndex, offsetBy: 5)) // , 삭제
print(str, "\n")

str.insert("@", at: str.index(str.startIndex, offsetBy: 5)) // @ 삽입
print(str, "\n")

/* [결과]
Hello Swift! 

Hello@ Swift! 

*/

 

1-9. 문자열의 비교

  비교 연산자를 사용하여 문자열을 비교할 수 있다. 각 문자열의 앞 문자부터 비교를 시작하고 결과가 나지 않는다면 그 다음 문자와의 비교를 이어간다.

print("ABC" == "ABC")
print("ABC" != "ABC")
print()

print("AAA" < "AAB")
print("AAA" > "AAB")
print("AA" < "AAA")

/* [결과]
true
false

true
false
true
*/

끝 !