Kotlin-문자열을 올바르게 연결하는 방법


89

매우 기본적인 질문입니다. Kotlin에서 문자열을 연결하는 올바른 방법은 무엇입니까?

Java에서는 다음 concat()과 같은 방법을 사용합니다.

String a = "Hello ";
String b = a.concat("World"); // b = Hello World

concat()기능은 Kotlin에서 사용할 수 없습니다. +표지판을 사용해야합니까 ?

답변:


137

Kotlin에서는 문자열 보간 / 템플릿을 사용하여 연결할 수 있습니다 .

val a = "Hello"
val b = "World"
val c = "$a $b"

출력은 다음과 같습니다. Hello World

또는 +/ plus()연산자를 사용하여 연결할 수 있습니다 .

val a = "Hello"
val b = "World"
val c = a + b   // same as calling operator function a.plus(b)

print(c)

출력은 다음과 같습니다. HelloWorld

또는 StringBuilder.

val a = "Hello"
val b = "World"

val sb = StringBuilder()
sb.append(a).append(b)
val c = sb.toString()

print(c)

출력은 다음과 같습니다. HelloWorld


6
연산자 "+"는 plus ()로 변환되므로 a.plus(b)또는 쓸 수 있고 a + b동일한 바이트 코드가 생성됩니다
D3xter

21
나는 바이트 코드로 보았다 및 문자열 보간 내부의 StringBuilder를 사용
crgarridos

@crgarridos, 이것은 연결을 위해 문자열 보간을 사용하는 Kotlin의 경우 "Hello" + "Word"StringBuilder를 사용하여 문자열에 추가하는 것만 큼 성능 이 우수하다는 것을 의미 someHelloStringBuilder.append("World")합니까?
Adam Hurwitz

1
문자열 보간은 리터럴 문자열 내부의 변수 해상도를 나타냅니다. 기술적으로 그렇습니다.
crgarridos

22

kotlin.Stringplus방법을 :

a.plus(b)

자세한 내용은 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html 을 참조하십시오.


3
+운영자가 정상입니다, 번역 된 연산자 함수를 호출하지 plus ...이 관용적하지 않습니다
제이슨 Minard

왜 그렇게 생각하세요?
incises

1
내가 한 것처럼 결과에 영향을주는 것을 잊지 마세요. 예 a = a.plus(b)를 들어
lorenzo

@lorenzo의 의견은이 답변이 위의 솔루션보다 덜 선호되는 이유를 설명합니다. 연결은 여러 if 문 plus()StringBuilder의 append 메소드 보다 실용적이지 않은 경우에 종속됩니다 .
Panos Gr

9

예, +기호를 사용하여 연결할 수 있습니다 . Kotlin에는 문자열 템플릿이 있으므로 다음과 같이 사용하는 것이 좋습니다.

var fn = "Hello"
var ln = "World"

"$fn $ln" 연결을 위해.

String.plus()방법을 사용할 수도 있습니다 .


+운영자가 정상입니다, 번역 된 연산자 함수를 호출하지 plus ...이 관용적하지 않습니다
제이슨 Minard

+의 플러스 버전이 관용적이지 않다고 생각하는 이유를 설명해 주시겠습니까?
incises

9

위의 대답에 동의하지만 알려진 문자열 값에만 좋습니다. 여기에 동적 문자열 값에 대한 제안이 있습니다.

// A list may come from an API JSON like
{
   "names": [
      "Person 1",
      "Person 2",
      "Person 3",
         ...
      "Person N"
   ]
}
var listOfNames = mutableListOf<String>() 

val stringOfNames = listOfNames.joinToString(", ") 
// ", " <- a separator for the strings, could be any string that you want

// Posible result
// Person 1, Person 2, Person 3, ..., Person N

이것은 구분 기호로 문자열 목록을 연결하는 데 유용합니다.


5

@Rhusfer 대답비슷하게 내가 이것을 썼습니다. 그룹이 EditText있고 값을 연결하려는 경우 다음 과 같이 작성할 수 있습니다.

listOf(edit_1, edit_2, edit_3, edit_4).joinToString(separator = "") { it.text.toString() }

을 연결 HashMap하려면 다음을 사용하십시오.

map.entries.joinToString(separator = ", ")
// Result:
// id=123, name=John, surname=Smith

5

이것을 시도해보십시오. Kotlin에서 문자열을 연결하는 기본 방법이라고 생각합니다.

val result = buildString{
    append("a")
    append("b")
}

println(result)

// you will see "ab" in console.

1
그것은는 buildString {대신stringBuild {
arnonuem

@arnonuem 나는 그것을 고쳤습니다 (당신이 자유롭게 느꼈을 것입니다).
Ellen Spertus

2

kotlin 예제에서 문자열을 연결하는 다양한 방법이 있습니다.

a = "Hello" , b= "World"
  1. + 연산자 사용 a+b

  2. plus()연산자 사용

    a.plus(b)

참고-+는 내부적으로 .plus () 메서드로만 변환됩니다.

위의 두 메서드에서 문자열이 변경 불가능하므로 새 문자열 객체가 생성됩니다. 기존 문자열을 수정하려면 StringBuilder를 사용할 수 있습니다.

StringBuilder str = StringBuilder("Hello").append("World")

1

yourString + = "newString"

이렇게하면 문자열을 연결할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.