Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách dùng concat() trong TextView Android để nối chuỗi

Giới thiệu

Bài viết minh họa cách dùng phương thức String.concat() để nối chuỗi trong Android TextView. So sánh với các cách nối chuỗi khác.

Các bước thực hiện

Bước 1: Tạo project mới

Android Studio → File → New Project → Empty Activity.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Nhập tên của bạn"
        android:inputType="textCapWords" />

    <Button
        android:id="@+id/btnConcat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Nối chuỗi" />

    <TextView
        android:id="@+id/tvResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:textSize="18sp"
        android:textStyle="bold" />

</LinearLayout>

Bước 3: Logic (MainActivity.kt)

package com.example.stringconcat

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btnConcat.setOnClickListener {
            val input = etName.text.toString().trim()
            if (input.isEmpty()) {
                etName.error = "Vui lòng nhập tên"
                return@setOnClickListener
            }

            // Cách 1: concat() - trả về String mới
            val result1 = input.concat(" tutorialspoint.com")

            // Cách 2: Toán tử + (khuyên dùng cho Kotlin)
            val result2 = "$input tutorialspoint.com"

            // Cách 3: StringBuilder (hiệu quả cho nhiều lần nối)
            val result3 = StringBuilder(input).append(" tutorialspoint.com").toString()

            // Cách 4: String.format
            val result4 = "%s tutorialspoint.com".format(input)

            tvResult.text = "Kết quả: $result1"
            // Log để so sánh
            println("concat: $result1")
            println("template: $result2")
            println("StringBuilder: $result3")
            println("format: $result4")
        }
    }
}

So sánh các cách nối chuỗi

Cách Cú pháp Hiệu năng Độ đọc Ghi chú
concat() s1.concat(s2) Tạo object mới mỗi lần Trung bình Null-safe (throw NPE nếu s1 null)
+ / Template "$s1 $s2" Tối ưu bởi compiler (StringBuilder) ✅ Tốt nhất (Kotlin) Null-safe, đọc dễ
StringBuilder StringBuilder().append()... ✅ Tốt nhất (loop, nhiều lần) Thấp Dùng cho loop, build lớn
String.format() "%s %s".format(a,b) Chậm (parse format) Tốt cho format phức tạp Localization, format số/ngày
joinToString() list.joinToString(" ") Tốt ✅ Rất tốt Nối collection/list

Lưu ý quan trọng

  • String bất biến (immutable): Mỗi lần nối tạo String mới → tránh nối trong loop lớn.
  • concat() ném NullPointerException nếu receiver null, khác với + (null thành "null").
  • Kotlin: ưu tiên String Template "$var" - an toàn, đọc dễ, hiệu năng tốt.
  • Android: Dùng getString(R.string.fmt, args) cho string resource có placeholder.

Ví dụ với String Resource

<!-- res/values/strings.xml -->
<string name="welcome_message">Chào %1$s, bạn đang xem %2$s</string>
val msg = getString(R.string.welcome_message, "Sairam", "tutorialspoint.com")
tvResult.text = msg