Kotlin - Cách nối một chuỗi một cách chính xác


90

Một câu hỏi rất cơ bản, cách phù hợp để nối một chuỗi trong Kotlin là gì?

Trong Java, bạn sẽ sử dụng concat()phương thức, ví dụ:

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

Tuy nhiên, concat()chức năng này không khả dụng cho Kotlin. Tôi có nên sử dụng +dấu hiệu?

Câu trả lời:


138

Trong Kotlin, bạn có thể nối bằng cách sử dụng nội suy chuỗi / mẫu :

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

Đầu ra sẽ là: Hello World

Hoặc bạn có thể nối bằng toán tử +/ plus():

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

print(c)

Đầu ra sẽ là: HelloWorld

Hoặc bạn có thể nối bằng cách sử dụng StringBuilder.

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

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

print(c)

Đầu ra sẽ là: HelloWorld


6
toán tử "+" được dịch thành dấu cộng (), vì vậy bạn có thể viết a.plus(b)hoặc a + bvà cùng một mã bytecode được tạo
D3xter

21
Tôi nhìn vào bytecode và chuỗi suy sử dụng StringBuilder nội
crgarridos

@crgarridos, Điều này có nghĩa là đối với Kotlin, việc sử dụng nội suy chuỗi để nối "Hello" + "Word"cũng hiệu quả như sử dụng StringBuilder để nối vào một chuỗi someHelloStringBuilder.append("World"),?
Adam Hurwitz

1
nội suy chuỗi đề cập đến độ phân giải của các biến bên trong một chuỗi ký tự. vì vậy về mặt kỹ thuật là có.
crgarridos

22

kotlin.Stringcó một plusphương pháp:

a.plus(b)

Xem https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html để biết thêm chi tiết.


3
Các +nhà điều hành là bình thường, không gọi hàm toán tử dịch plus ... Đây không phải là thành ngữ
Jayson Minard

Tại sao bạn nghĩ vậy ?
incises

1
Đừng quên ảnh hưởng đến kết quả của bạn như tôi đã làm, chẳng a = a.plus(b)hạn như
lorenzo

Bình luận của @lorenzo giải thích tại sao câu trả lời này ít thích hợp hơn so với các giải pháp ở trên. Khi nối phụ thuộc vào nhiều câu lệnh if plus()ít thực tế hơn StringBuilderphương thức nối thêm của một ví dụ.
Panos Gr

9

Có, bạn có thể nối bằng +dấu. Kotlin có các mẫu chuỗi, vì vậy tốt hơn nên sử dụng chúng như:

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

"$fn $ln" để nối.

Bạn thậm chí có thể sử dụng String.plus()phương pháp.


Các +nhà điều hành là bình thường, không gọi hàm toán tử dịch plus ... Đây không phải là thành ngữ
Jayson Minard

Bạn có thể vui lòng giải thích lý do tại sao bạn cho rằng phiên bản cộng của + không phải là thành ngữ?
incises

9

Tôi đồng ý với câu trả lời được chấp nhận ở trên nhưng nó chỉ tốt cho các giá trị chuỗi đã biết. Đối với các giá trị chuỗi động, đây là gợi ý của tôi.

// 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

Điều này hữu ích để nối danh sách các chuỗi với dấu phân cách.


5

Tương tự với câu trả lời @Rhusfer mà tôi đã viết cái này. Trong trường hợp bạn có một nhóm các EditTexts và muốn nối các giá trị của chúng, bạn có thể viết:

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

Nếu bạn muốn nối HashMap, hãy sử dụng cái này:

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

5

Hãy thử điều này, tôi nghĩ rằng đây là một cách nguyên bản để nối các chuỗi trong Kotlin:

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

println(result)

// you will see "ab" in console.

1
buildString {thay vìstringBuild {
arnonuem

@arnonuem Tôi đã sửa nó (như bạn nên làm).
Ellen Spertus

2

Có nhiều cách khác nhau để nối các chuỗi trong kotlin Ví dụ -

a = "Hello" , b= "World"
  1. Sử dụng toán tử + a+b

  2. Sử dụng plus()toán tử

    a.plus(b)

Lưu ý - + chỉ được chuyển đổi nội bộ thành phương thức .plus ()

Trong 2 phương thức trên, một đối tượng chuỗi mới được tạo vì các chuỗi là bất biến. nếu chúng ta muốn sửa đổi chuỗi hiện có, chúng ta có thể sử dụng StringBuilder

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

1

yourString + = "newString"

Bằng cách này, bạn có thể nối một chuỗi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.