3-2. 문자(Character)
이번 항에서 다루는 내용은 문자(Character)에 대한 항목이다. 문자열(String) 은 다항의 문자(Character)로 구성되어 있다고 생각하면 편할 것이다.
문자 작업
- 문자열과 for루프를 통해 String의 각각의 Character값에 접근이 가능하다.
for character in "Dog" {
print(character)
}
//D
//o
//g
//다음 순서대로 문자열 속 문자를 출력하게 된다.
- 하나의 문자열 리터럴에 대해서는 단독의 Character타입의 상수 또는 변수 생성이 가능하다.
let someString : Character = "!"
// 단독 문자열 리터럴에 대해서는 문자 타입으로 초기화가 가능하다.
- String값은 초기화 인자로 Character값의 배열을 전달해 생성이 가능하다.
let catCharacter : [Character] = ["C", "a", "t"]
let catString = String(catCharacter)
print(catString)
//Cat 을 출력하게 된다.
//문자의 배열을 문자열 타입 전환 시 이를 유추하여 문자열로 반환한다.
문자열과 문자의 연결
- String값은 더하기 연산자(+)를 통해 연결하고 새로운 String 생성이 가능하다.
let someString = "Some String"
let anyString = " any String"
let new = someString + anyString
//new는 "Some String any String 문자열 리터럴을 가지게 된다.
- 존재하는 String변수에 덧셈대입 연산자(+=)로 String값 연결이 가능하다.
var someString = "Some String"
let anyString = " any String"
someString += anyString
//위와 동일한 결과를 나타내준다.
- String타입의 append() 메서드를 이용하여 String변수에 Character값을 추가할 수 있다.
let someString : Character = "!"
var anyString : String = "Hello world"
anyString.append(someString)
//"Hello world!"를 값으로 가지게 된다.
문자열 삽입
for character in "Dog" {
print(character)
}
//D
//o
//g
//다음 순서대로 문자열 속 문자를 출력하게 된다.
let someString : Character = "!"
// 단독 문자열 리터럴에 대해서는 문자 타입으로 초기화가 가능하다.
let catCharacter : [Character] = ["C", "a", "t"]
let catString = String(catCharacter)
print(catString)
//Cat 을 출력하게 된다.
//문자의 배열을 문자열 타입 전환 시 이를 유추하여 문자열로 반환한다.
- String값은 더하기 연산자(+)를 통해 연결하고 새로운 String 생성이 가능하다.
let someString = "Some String"
let anyString = " any String"
let new = someString + anyString
//new는 "Some String any String 문자열 리터럴을 가지게 된다.
- 존재하는 String변수에 덧셈대입 연산자(+=)로 String값 연결이 가능하다.
var someString = "Some String"
let anyString = " any String"
someString += anyString
//위와 동일한 결과를 나타내준다.
- String타입의 append() 메서드를 이용하여 String변수에 Character값을 추가할 수 있다.
let someString : Character = "!"
var anyString : String = "Hello world"
anyString.append(someString)
//"Hello world!"를 값으로 가지게 된다.
문자열 삽입
문자열 삽입은 상수, 변수, 리터럴에 값이 포함된 표현식을 혼합해서 새로운 String을 생성하는 것이다. 이는 문자열 리터럴에 백슬래시 및 소괄호를 감싸서 전달이 가능하다. 리터럴 안에서 연산을 통한 전달도 가능하다.
let someNumber : Int = 1
let message : String = "\(someNumber) is my answer!"
let message2 : String = "\(someNumber*2) is my new answer!"
//이 경우 메세지는 1 is my answer!를 가지게 된다.
//아래는 연산 후 2 is my answer!를 가진다.
문자열 접근과 수정
- 각 String값은 문자열에 각 Character의 위치에 해당하는 String.Index인 인덱스 타입을 가지고 있다. String의 첫 Character에 접근하기 위해 startIndex 프로퍼티를 사용한다. endIndex 프로퍼티는 마지막 문자를에 대한 접근이 가능하다. 만약 String이 비어있다면 둘은 값이 같다. String의 메서드 index(before:), index(after:)를 사용하여 주어진 인덱스 전후에 대한 접근이 가능하다. 주어진 인덱스에서 먼 인덱스에 접근하려면 index(_:offsetBy:)메서드 사용도 가능하다. 아래 예시를 참고하자.
let someString = "Some String!"
someString[someString.startIndex]
//S를 리턴한다.
//someString의 인덱스로 접근하므로 가장 첫 인덱스 값인 S를 반환해준다.
someString[someString.index(before: someString.endIndex)]
//!
//someString에서 마지막 인덱스를 리턴한다.
someString[someString.index(after: someString.startIndex)]
// o를 리턴한다.
- 문자열의 특정 인덱스에 하나의 문자를 삽입하려면 insert(at:_)메서드를 사용하며, 다른 문자열의 콘텐츠를 특정 인덱스에 삽입하려면 insert(contentsOf:at:)메서드를 이용한다.
var welcome = "Hello"
welcome.insert("!", at: welcome.endIndex)
//이렇게 하게되면 "Hello!"를 리턴하게 된다.
welcome.insert(contentsOf: "there", at: welcome.index(before: welcome.endIndex))
//이렇게 해주게 되면 "hello there!"를 반환해준다.
- 문자열에서 특정 인덱스에 있는 하나의 문자를 삭제하려면 remove(at:)메서드를 사용하고 특정 범위의 부분 문자열을 삭제하려면 removeSubrange(_:)메서드를 사용한다.
welcome.remove(at: welcome.index(before: welcome.endIndex))
//이렇게 하면 "hello there"를 반환해준다. 가장 마지막 인덱스 값인 !가 사라져있다.
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
//반 닫힘 연산자를 이용하여 다음과 같이 범위를 인덱스 범위를 지정해준다.
welcome.removeSubrange(range)
//"hello"를 반환하게 된다.
부분 문자열
- 문자열을 원하는 인덱스 크기만큼 나누어서 유저가 원하는 새로운 문자열로 초기화가 가능하다.
let someString = "Hello, world"
let index = someString.firstIndex(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
//다음과 같이 처음 , 가 나오는 인덱스를 범위로 잡기 위해 firstIndex(of:)메소드를 사용했다.
//그리고 난 후 beginning이라는 상수를 해당 인덱스 앞까지의 문자열 리터럴로 초기화해주었다
let newString = String(beginning)
//그리고 난 결과물을 String의 인스턴스로 최종 변환해주어야 한다.
문자열의 비교
- 문자열은 같음 연산자와 같지 않음 연산자를 활용해서 비교하게 된다.
let a = "Hello"
let b = "world"
if a == b {
print(a)
}
//다음과 같이 연산자를 통해서 문자열의 비교여부를 참, 거짓으로 판별 가능하다.
- 접두사와 접미사의 동등성 비교를 위해서 hasPrefix(:) 와 hasSuffix(:)의 메소드를 호출할 수 있다. 이는 하나의 String 타입 인자를 받아 부울 값을 반환해준다.
let acting = [
"Act1. romeo",
"Act1. Juliet",
"Act1. Room"
]
var act1SceneCount = 0
for scene in acting {
if scene.hasPrefix("Act1.") {
act1SceneCount += 1
}
}
//다음과 같이 하면 최종 act1SceneCount변수는 3의 값을 지니게 된다.
var romeoCount = 0
for scene in acting {
if scene.hasSuffix("romeo") {
romeoCount += 1
}
}
//다음과 같이 하게 된다면 최종 1을 지니게 된다.
Author And Source
이 문제에 관하여(3-2. 문자(Character)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@devleeky16498/3-2.-문자Character
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let someString = "Some String!"
someString[someString.startIndex]
//S를 리턴한다.
//someString의 인덱스로 접근하므로 가장 첫 인덱스 값인 S를 반환해준다.
someString[someString.index(before: someString.endIndex)]
//!
//someString에서 마지막 인덱스를 리턴한다.
someString[someString.index(after: someString.startIndex)]
// o를 리턴한다.
var welcome = "Hello"
welcome.insert("!", at: welcome.endIndex)
//이렇게 하게되면 "Hello!"를 리턴하게 된다.
welcome.insert(contentsOf: "there", at: welcome.index(before: welcome.endIndex))
//이렇게 해주게 되면 "hello there!"를 반환해준다.
welcome.remove(at: welcome.index(before: welcome.endIndex))
//이렇게 하면 "hello there"를 반환해준다. 가장 마지막 인덱스 값인 !가 사라져있다.
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
//반 닫힘 연산자를 이용하여 다음과 같이 범위를 인덱스 범위를 지정해준다.
welcome.removeSubrange(range)
//"hello"를 반환하게 된다.
- 문자열을 원하는 인덱스 크기만큼 나누어서 유저가 원하는 새로운 문자열로 초기화가 가능하다.
let someString = "Hello, world"
let index = someString.firstIndex(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
//다음과 같이 처음 , 가 나오는 인덱스를 범위로 잡기 위해 firstIndex(of:)메소드를 사용했다.
//그리고 난 후 beginning이라는 상수를 해당 인덱스 앞까지의 문자열 리터럴로 초기화해주었다
let newString = String(beginning)
//그리고 난 결과물을 String의 인스턴스로 최종 변환해주어야 한다.
문자열의 비교
- 문자열은 같음 연산자와 같지 않음 연산자를 활용해서 비교하게 된다.
let a = "Hello"
let b = "world"
if a == b {
print(a)
}
//다음과 같이 연산자를 통해서 문자열의 비교여부를 참, 거짓으로 판별 가능하다.
- 접두사와 접미사의 동등성 비교를 위해서 hasPrefix(:) 와 hasSuffix(:)의 메소드를 호출할 수 있다. 이는 하나의 String 타입 인자를 받아 부울 값을 반환해준다.
let acting = [
"Act1. romeo",
"Act1. Juliet",
"Act1. Room"
]
var act1SceneCount = 0
for scene in acting {
if scene.hasPrefix("Act1.") {
act1SceneCount += 1
}
}
//다음과 같이 하면 최종 act1SceneCount변수는 3의 값을 지니게 된다.
var romeoCount = 0
for scene in acting {
if scene.hasSuffix("romeo") {
romeoCount += 1
}
}
//다음과 같이 하게 된다면 최종 1을 지니게 된다.
Author And Source
이 문제에 관하여(3-2. 문자(Character)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@devleeky16498/3-2.-문자Character
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let a = "Hello"
let b = "world"
if a == b {
print(a)
}
//다음과 같이 연산자를 통해서 문자열의 비교여부를 참, 거짓으로 판별 가능하다.
let acting = [
"Act1. romeo",
"Act1. Juliet",
"Act1. Room"
]
var act1SceneCount = 0
for scene in acting {
if scene.hasPrefix("Act1.") {
act1SceneCount += 1
}
}
//다음과 같이 하면 최종 act1SceneCount변수는 3의 값을 지니게 된다.
var romeoCount = 0
for scene in acting {
if scene.hasSuffix("romeo") {
romeoCount += 1
}
}
//다음과 같이 하게 된다면 최종 1을 지니게 된다.
Author And Source
이 문제에 관하여(3-2. 문자(Character)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@devleeky16498/3-2.-문자Character저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)