본문 바로가기
Android (Kotlin)/kotlin 문법

[kotlin] joinToString(prefix, suffix, separator) 리스트를 문자열로 바꾸기

by 키윤 2023. 12. 2.

1. List를 문자열로 바꾸기

val numbers = listOf(12, 24, 46, 68, 80)
val n1 = numbers.joinToString()   // n1: "12, 24, 46, 68, 80"
val n2 = numbers.joinToString("") // n2: "1224466880"

val watermelon = listOf("수", "박", "수", "박")
val w1 = numbers.joinToString()   // w1: "수, 박, 수, 박"
val w2 = numbers.joinToString("") // w2: "수박수박"

2. 접두사랑 접미사 붙이기

val numbers = listOf(11, 22, 3, 41, 52, 6)
val string = numbers.joinToString(prefix = "<", postfix = ">", separator = "") 
assertEquals("<1122341526>", string)

3. List가 너무 길면 limit을 설정하기

val chars = charArrayOf('h', 'e', 'l', 'l', 'o', 'o', 'o', 'o')
val string = chars.joinToString(separator = "", limit = 5, truncated = "!") { it.uppercaseChar().toString() }
assertEquals("HELLO!", string)

trucated: 몹시 생략된, 잘라버린.
즉 limit 뒤에 있는 문자열은 !로 생략/대체 한다고 보면 된다.
그리고 추가로 람다식을 이용해서 캐릭터들을 대문자로 바꾸어주었다.

4. 기존 string에 list에 있는 element를 추가하기 - joinTo()

val sb = StringBuilder("An existing string and a list: ")
val numbers = listOf(11, 22, 3, 41, 52, 6)
val string = numbers.joinTo(sb).toString()
assertEquals("An existing string and a list: 11, 22, 3, 41, 52, 6", string)

joinTo 안에도 동일하게 separator을 넣어줄 수 있다

val sb = StringBuilder("An existing string and a list: ")
val numbers = listOf(11, 22, 3, 41, 52, 6)
val string = numbers.joinTo(sb, "").toString()
assertEquals("An existing string and a list: 1122341526", string)

5. 반복문 사용하기

val elements = listOf("a", "b", "c", "d", "e")
var string = ""

for(s in elements){
    string += s
}

assertEquals("abcde", string)

쉬운데 문자열을 덧셈할 수 있다는 개념이 아직 생소해서 응용할 때 떠오르지는 않는다. 
하지만 리스트가 너무 클 떄에는 효율적이지 않다고 한다. 그래서 대신에 StringBuilder을 사용할 수 있다.

6. StringBuilder() 사용하기

val letters = listOf("a", "b", "c", "d", "e", "f")
val builder = StringBuilder()

for(s in letters){
    builder.append(s)
}

assertEquals("abcdef", builder.toString())

StringBuilder의 사용의 편리성을 더하는 몇가지 syntax가 있다.

val letters = listOf("a", "b", "c", "d", "e", "f")
val alreadyAString = buildString { for (s in letters) append(s) } // `this` is a StringBuilder inside the lambda
assertEquals("abcdef", alreadyAString)

출력값을 customize 하기 위해서 removeSuffix() 와 같은 함수를 이용할 수도 있다.

val letters = listOf("a", "b", "c", "d", "e", "f")
val string = buildString { letters.forEach(::append) }
val withoutSuffix = string.removeSuffix("f")
assertEquals("abcde", withoutSuffix)

 

참조: https://www.baeldung.com/kotlin/convert-list-to-string

'Android (Kotlin) > kotlin 문법' 카테고리의 다른 글

[Kotlin] 유용한 기능  (1) 2023.12.04
[Kotlin] List - forEach  (2) 2023.12.04
[Kotlin] abstract vs interface  (1) 2023.12.03
[Kotlin] Data Class  (1) 2023.12.03
[Collection Sort - kotlin] sort(), sortBy(), sortWith()  (0) 2023.11.30