개요
최근 알고리즘 문제 풀이 언어를 C++
→ Kotlin
으로 전환하고 있습니다. 알고리즘 풀이 언어로 선택한 언어의 학습에 있어서 가장 중요한 것은 바로 Standard Library입니다. 해당 언어의 STL을 다루는 능력에 따라 문제 풀이의 속도와 효율성이 천차만별로 달라지게 됩니다. 특히나 코틀린의 경우, 다른 언어에 비해 자료구조나 문자열에 대해 훨씬 다양한 STL이 제공되기 때문에 이를 숙지하는 것이 굉장히 중요합니다. 따라서 유용한 Kotlin STL을 블로그에 싹 정리해보기로 하였습니다. 이번 글은 String
및 StringBuilder
에 대한 내용입니다.
String vs StringBuilder
안드로이드 프로그래밍을 할 때에는 String
만을 주로 사용합니다만, ps에 있어서는 StringBuilder
가 필요한 순간이 많습니다. 두 객체의 차이는 다음과 같습니다.
String
- immutable
- 멀티스레드 환경에서 안전
- 문자열이 수정될 때마다 새로운 객체가 Heap에 할당
StringBuilder
- mutable
- 멀티스레드 환경에서 안전하지 않음
- 문자열 삽입, 삭제, 수정 시에도 기존 객체를 유지
즉, 하나의 문자열을 지속적으로 수정하여 답을 내는 경우에는 StringBuilder
의 성능이 압도적으로 뛰어납니다. 특히 객체의 재할당 없이 문자열을 지속적으로 추가해야 하는 경우에는 StringBuilder
가 유일한 선택입니다.
이 외에 StringBuilder
의 thread-safe 버전인 StringBuffer
도 있습니다만, ps에서는 멀티스레드 환경을 고려하지 않으므로 제외하였습니다.
String
String은 immutable이므로, 아래 모든 함수는 string을 직접 변경하는 것이 아닌 변경된 새로운 문자열을 반환합니다.
init (CharArray)
char
배열로 문자열을 생성합니다.
1 |
|
length
문자열의 길이를 반환합니다.
1 |
|
1 |
|
get
특정 인덱스의 문자를 반환합니다.
1 |
|
1 |
|
plus
특정 문자열을 이어붙인 문자열을 반환합니다.
1 |
|
1 |
|
indices
문자열의 인덱스 범위를 반환합니다.
1 |
|
1 |
|
lastIndex
문자열의 마지막 인덱스를 반환하고, 비어있을 경우 -1
을 반환합니다.
1 |
|
1 |
|
all
문자열의 모든 문자들이 주어진 조건을 만족하는지 체크합니다.
1 |
|
1 |
|
any
문자열의 모든 문자들 중 하나라도 주어진 조건을 만족하는지 체크합니다.
1 |
|
1 |
|
chunked
문자열을 특정 길이만큼 쪼개어 리스트로 반환합니다.
1 |
|
1 |
|
commonPrefixWith
특정 문자열과 가장 길게 일치하는 접두사를 반환하고, 존재하지 않을 경우 빈 문자열을 반환합니다.
1 |
|
1 |
|
commonSuffixWith
특정 문자열과 가장 길게 일치하는 접미사를 반환하고, 존재하지 않을 경우 빈 문자열을 반환합니다.
1 |
|
1 |
|
contains
특정 문자열 및 문자가 포함되어 있는지 체크합니다.
1 |
|
1 |
|
count
특정 조건을 만족하는 문자의 갯수를 반환합니다.
1 |
|
1 |
|
drop
앞에서 특정 갯수만큼의 문자를 제거합니다.
1 |
|
1 |
|
dropWhile
특정 조건을 만족하지 않는 문자가 등장할 때 까지 앞에서부터 제거합니다.
1 |
|
1 |
|
dropLast
뒤에서 특정 갯수만큼의 문자를 제거합니다.
1 |
|
1 |
|
dropLastWhile
특정 조건을 만족하지 않는 문자가 등장할 때 까지 뒤에서부터 제거합니다.
1 |
|
1 |
|
endsWith
문자열이 특정 문자 또는 문자열로 끝나는지 체크합니다.
1 |
|
1 |
|
filter
특정 조건을 만족하는 문자들로만 이루어진 문자열을 반환합니다.
1 |
|
1 |
|
filterNot
특정 조건을 만족하지 않는 문자들로만 이루어진 문자열을 반환합니다.
1 |
|
1 |
|
filterIndexed
filter
와 동일하나, index도 인자로 포함합니다.
1 |
|
1 |
|
first
첫번째 문자를 반환하거나, 특정 조건을 만족하는 첫번째 문자를 반환합니다.
1 |
|
1 |
|
fold
초기값에 문자에 대한 특정 함수 수행 결과를 순차적으로 누적합니다.
1 |
|
1 |
|
foldRight
fold
와 동일하나, 역순으로 누적합니다.
1 |
|
1 |
|
foldIndexed
fold
와 동일하나, 인자에 index를 포함합니다.
1 |
|
1 |
|
foldRightIndexed
foldIndexed
와 동일하나, 역순으로 누적합니다.
1 |
|
1 |
|
forEach
각 문자에 대해 반복문을 실행합니다.
1 |
|
1 |
|
forEachIndexed
forEach
와 동일하나, 인자에 index를 포함합니다.
1 |
|
1 |
|
ifBlank
특정 문자열이 비어있거나 공백만 포함할 시 기본값을 반환합니다.
1 |
|
1 |
|
ifEmpty
특정 문자열이 비어있을 시 기본값을 반환합니다.
1 |
|
1 |
|
indexOf
특정 문자 또는 문자열과 일치하는 패턴의 첫번째 인덱스를 반환합니다.
1 |
|
1 |
|
indexOfAny
특정 배열 안의 문자 및 문자열과 일치하는 패턴의 첫번째 인덱스를 반환합니다.
1 |
|
1 |
|
indexOfFirst
특정 조건을 만족하는 첫번째 문자의 인덱스를 반환합니다.
1 |
|
1 |
|
indexOfLast
특정 조건을 만족하는 마지막 문자의 인덱스를 반환합니다.
1 |
|
1 |
|
isEmpty & isNotEmpty
비어있는 문자열인지 아닌지 체크합니다.
1 |
|
1 |
|
isNotBlank
공백으로만 이루어진 문자열이 아닌지 체크합니다.
1 |
|
1 |
|
last
마지막 문자를 반환하거나, 특정 조건을 만족하는 마지막 문자를 반환합니다.
1 |
|
1 |
|
lowercase
문자열의 모든 알파벳 문자를 소문자로 변환한 새로운 문자열을 반환합니다.
1 |
|
1 |
|
map
문자열의 모든 문자에 대해 특정 연산을 거친 문자로 이루어진 리스트를 반환합니다.
1 |
|
1 |
|
mapIndexed
map
과 동일하나, 인자로 index를 포함합니다.
1 |
|
1 |
|
padStart & padEnd
문자열의 시작 또는 끝에 패딩 문자를 추가합니다.
1 |
|
1 |
|
removePrefix
문자열의 앞부분에서 특정 문자열과 일치하는 부분을 제거한 새로운 문자열을 반환합니다. 없을 경우 그대로 반환합니다.
1 |
|
1 |
|
removeRange
특정 범위만큼을 제거한 새로운 문자열을 반환합니다.
1 |
|
1 |
|
removeSuffix
문자열의 뒷부분에서 특정 문자열과 일치하는 부분을 제거한 새로운 문자열을 반환합니다. 없을 경우 그대로 반환합니다.
1 |
|
1 |
|
removeSurrounding
문자열이 인자로 넘긴 prefix
와 suffix
가 각각 접두사, 접미사와 모두 일치할 경우에만 이를 제거한 새로운 문자열을 반환합니다. 그렇지 않을 시 그대로 반환합니다.
1 |
|
1 |
|
repeat
문자열 패턴을 반복한 문자열을 반환합니다.
1 |
|
1 |
|
replace
문자열에서 특정 문자열 또는 정규식과 일치하는 부분을 모두 특정 문자열로 치환한 문자열을 반환합니다.
1 |
|
1 |
|
replaceFirst
replace
와 동일하나, 첫번째로 일치하는 부분만 치환한 문자열을 반환합니다.
1 |
|
1 |
|
replaceRange
문자열의 특정 범위를 특정 문자열로 치환한 문자열을 반환합니다.
1 |
|
1 |
|
reversed
문자열을 뒤집은 새로운 문자열을 반환합니다.
1 |
|
1 |
|
slice
특정 범위 안의 문자열을 반환합니다.
1 |
|
1 |
|
split
특정 문자, 문자열 또는 정규식을 기준으로 문자열을 쪼갠 리스트를 반환합니다.
1 |
|
1 |
|
startsWith
문자열이 특정 문자 또는 문자열로 시작하는지 체크합니다.
1 |
|
1 |
|
substring
특정 범위 안의 문자열을 반환합니다.
1 |
|
1 |
|
take
앞부터 특정 갯수만큼의 문자열을 갖는 새로운 문자열을 반환합니다.
1 |
|
1 |
|
takeWhile
앞부터 특정 조건을 만족하지 않는 문자가 등장할 때까지 나온 문자들로 이루어진 문자열을 반환합니다.
1 |
|
1 |
|
takeLast
뒤부터 특정 갯수만큼의 문자열을 갖는 새로운 문자열을 반환합니다.
1 |
|
1 |
|
takeLastWhile
뒤부터 특정 조건을 만족하지 않는 문자가 등장할 때까지 나온 문자들로 이루어진 문자열을 반환합니다.
1 |
|
1 |
|
toList & toSet & toSortedSet
문자열을 Char
를 요소로 갖는 Collection
으로 변환합니다.
1 |
|
1 |
|
trim
문자열 양 끝의 공백을 제거한 문자열을 반환합니다.
1 |
|
1 |
|
uppercase
문자열의 모든 알파벳을 대문자로 변환한 새로운 문자열을 반환합니다.
1 |
|
1 |
|
StringBuilder
StringBuiler
의 경우 String
에서 사용 가능한 lowercase()
와 uppercase()
를 제외하고서는 모두 사용 가능합니다. 그 외에 추가적으로 알아둘만 한것은 추가 및 삭제와 관련된 함수입니다.
append
문자 및 문자열을 뒤에 추가합니다.
1 |
|
1 |
|
clear
문자열을 비웁니다.
1 |
|
1 |
|
deleteAt
특정 인덱스의 문자를 제거합니다.
1 |
|
1 |
|
insert
특정 인덱스에 특정 문자 및 문자열을 삽입합니다.
1 |
|
1 |
|
reverse
문자열을 뒤집습니다. (reversed()
와는 다르게 실제 원본 문자열을 뒤집고 반환합니다.)
1 |
|
1 |
|
Char
부록으로 Char
에 대해 유용한 STL에 관한 정리입니다.
digitToInt
0
~ 9
사이의 Char
를 숫자로 변환합니다.
1 |
|
1 |
|
isDigit
해당 문자가 숫자인지 확인합니다.
1 |
|
1 |
|
isLetter
해당 문자가 알파벳인지 확인합니다.
1 |
|
1 |
|
lowercaseChar
해당 문자를 소문자로 변환합니다.
1 |
|
1 |
|
uppercaseChar
해당 문자를 대문자로 변환합니다.
1 |
|
1 |
|
마치며
이상으로 String
, StringBuilder
, 그리고 Char
에 대한 일부 STL의 정의와 예시를 정리해보았습니다. 사실 공식 문서에는 위에서 소개한 것보다 훨씬 많은 STL이 존재합니다만, PS에서 주로 사용되는 것들 위주로만 정리해보았습니다. 지속적으로 알고리즘 문제를 풀면서 본 포스트에서 놓친 유용한 STL이 있다면 지속적으로 추가할 계획입니다.
- Post link: https://blog.yjyoon.dev/kotlin/2023/03/12/kotlin-01/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.