Kotlin StringBuilder - 문자열 효율적으로 다루기
Notepad96
·2020. 11. 30. 14:36
1. StringBuilder
String 문자열은 참조 타입으로써 만약 문자열 뒤에 문자열을 추가하는 것 같은 수정하는 작업을 한다면
기존 참조하고 있던 곳에 추가하는 것이 아니라 추가된 문자열을 갖는 새로 String을 생성 후 참조를 바꾸는 형식이다.
이러한 연산이 끝난 후 "ab"라는 쓰레기가 남게 된다.
그리고 이러한 연산을 많아질수록 자원 관리와 같은 점에서 비효율적이다.
이러할 경우 사용할 수 있는 것이 StringBuilder이며
이는 String 처럼 참조를 바꾸는 식이 아니라 참조하고 있는 값을 바꾸는 식이다.
따라서 문자열을 수정하는 작업이 많을 경우 String을 사용하기보다는 StringBuilder를 사용해야 좋다.
2. 코 드
환경 : Kotlin Version = 1.4.20, JVM
fun main(args : Array<String>) {
/*
기존 참조하던 "abc" 뒤에 "def"를 추가하는 것이 아니라
추가된 문자열 "abcdef"를 새로 생성하고 참조하는 것이다.
그러면 쓰레기 "abc"가 남게되며 이러한 과정이 많아지면 비효율적
var s1 = "ab"
s1 += "cd"
*/
val str = StringBuilder() // 빈 생성자
println("1. 문자열 : $str")
/* 추가 */
str.append(5) // Int 타입
str.append("gdfa") // String 타입
str.append('Q') // Char 타입
str.append(true) // Boolean 타입
str.append(5431)
str.append("DFSDE")
str.append("treq")
println("2. 문자열 : $str")
println("index=0 : ${str[0]}, index=5 : ${str[5]}")
/* 삭제 */
str.deleteCharAt(0) // index
str.delete(0, 1) // [start, end)
println("3. 문자열 : $str")
println("=========================================")
val temp: String = "ABCD"
val str2 = StringBuilder(temp) // String을 받는 생성자
println("1. 문자열 : $str2")
println("길이 = ${str2.length}")
println("뒤집기 = ${str2.reverse()}")
str2.insert(0, "fds") // index=0 위치에 추가
println("2. 문자열 : $str2")
val li = listOf("abc", "def", "ghi")
str2.append(li.joinToString(""))
println("3. 문자열 : $str2")
println("4-1. 부분 문자열 : ${str2.substring(3)}") // [3, length)
println("4-2. 부분 문자열 : ${str2.substring(3, 7)}") // [3, 7)
println("4-3. 부분 문자열 : ${str2.substring(3..7)}") // [3, 7]
println("=========================================")
val str3 = str.toString() // String Type으로 저장
if(str3 is String) println("String Type")
}
- StringBuilder는 빈 생성자가 존재한다.
append 함수를 사용하여 뒤에 문자열을 추가해줄 수 있다.
append의 인자로서는 String, Int, Char, Boolean 등 다 존재하여 사용할 수 있다.
'[]' 연산자가 정의되어 있어 인덱스를 사용하여 문자의(Char) 접근할 수 있다.
- 삭제하기 위해서는
deleteCharAt(index) : index 위치한 문자 삭제
delete(start, end) : [start, end) start이상 end 미만 index의 위치한 문자들 삭제
를 사용할 수 있다.
- StringBuilder는 문자열을 받는 생성자도 존재한다.
length : 길이를 반환
reverse : 거꾸로 뒤집기
insert( index, value) : index 위치에 value를 삽입
문자열 리스트를 삽입하고자 하면 joinToString을 사용할 수 있다.
- subString울 사용하여 부분 문자열을 갖고올 수 있다.
1, 2 방법은 Java에서 사용하는 것과 동일하다.
- 어디까지나 StringBuilder 타입이기 때문에 String 타입으로 저장하거나 이용하고자 한다면 toString을 사용하여 String 타입으로 변환해주어야 한다.
3. 참 조
'Kotlin > Algorithm' 카테고리의 다른 글
Kotlin Permutation(순열) (3) | 2020.12.04 |
---|---|
Kotlin pi, 절댓값, 대소 비교 - PI, abs, max, min (0) | 2020.12.01 |
Kotlin 반올림, 올림, 내림 - round, ceil, floor (0) | 2020.11.30 |
Kotlin 제곱, 제곱근 구하기 - sqrt, pow, hypot (0) | 2020.11.29 |
Kotlin 최대공약수/최소공배수 - 유클리드 호제법 (0) | 2020.11.29 |