Search…

String trong Java

10/11/20204 min read
Giới thiệu về kiểu chuỗi và kỹ thuật thao tác với chuỗi trong ngôn ngữ lập trình Java

Giới thiệu

Kiểu String (dịch là kiểu chuỗi, từ đây về sau sẽ sử dụng từ kiểu chuỗi thay cho kiểu String) là kiểu dữ liệu quan trọng với các lập trình viên. Tuy nhiên, với mỗi ngôn ngữ lập trình, cách hiện thực hóa kiểu chuỗi có 1 vài điểm khác nhau. Bài viết giới thiệu về kiểu chuỗi và kỹ thuật thao tác với chuỗi trong ngôn ngữ lập trình Java.

Kiểu chuỗi trong Java

Khái niệm

Chuỗi trong Java là 1 dãy các ký tự Unicode 16-bit.

Ví dụ: Chuỗi "STDIO" là 1 dãy gồm các ký tự S T D I O, mỗi 1 ký tự là 1 dãy nhị phân 16-bit.

Đặc điểm

Chuỗi trong Java là 1 đối tượng. Các thao tác với chuỗi phải thông qua giao diện của lớp String (có thể sử dụng lớp StringBuffer hoặc StringBuilder thay cho String).

Chuỗi trong Java là immutable. Nghĩa là giá trị của chuỗi là không thể thay đổi. Việc này đảm bảo tính toàn vẹn dữ liệu cho lập trình đa luồng (multi thread).

Từ bản Java 5 trở đi, chuỗi trong Java đã hỗ trợ cơ chế mutable thông qua lớp StringBufferStringBuilder.

Cơ chế Immutable

Xét 1 đoạn mã nguồn đơn giản sau:

package TestString;

import java.lang.String;

public class main {
	
	public static void main(String[] args) {
		
		String s = "STDIO";
		s = s.concat("-LAPTRINHJAVA"); 	// Concatenate 2 strings

	}
}

Theo dõi đoạn mã tạo ra chuỗi s = "STDIO". Sau đó, dùng hàm concat để thay đổi nội dung của chuỗi thành "STDIO-LAPTRINHJAVA" (nối chuỗi "–LAPTRINHJAVA" vào chuỗi s).

Hình ảnh minh họa:

Bước 1:

String s = "STDIO";
ss_1

Bước 2:

s = s.concat("-LAPTRINHJAVA");

Sự thay đổi nội dung của chuỗi sẽ tạo ra chuỗi mới chứ không thay đổi chuỗi gốc hiện tại.

Sau đó tham chiếu đến chuỗi cũ sẽ thay đổi thành tham chiếu đến chuỗi mới.

Cơ chế này trong chuỗi gọi là Immutable.

ss_2

Lớp String và các phương thức thông dụng

Java hỗ trợ các thao tác với chuỗi thông qua lớp String. Lớp này nằm trong gói java.lang.

Trong quá trình sử dụng, import gói java.lang theo cú pháp sau:

import java.lang.String;

Hoặc:

import java.lang.*;

Lớp String hỗ trợ hơn 50 hàm để thao tác với kiểu chuỗi. Chức năng của 1 số hàm thông dụng:

STT Nguyên mẫu hàm Chức năng
1 public char charAt(int s) Trả về ký tự có chỉ số là i trong chuỗi cần tìm.
2 public String concat(String s2) Trả về chuỗi đã được nối thêm vào chuỗi s2, s2 sẽ được nối vào sau chuỗi gọi hàm.
3 public boolean equals(String s2) Trả về true nếu giá trị của chuỗi s2 bằng giá trị chuỗi đang xét, trả về false nếu ngược lại. Phân biệt chữ hoa và chữ thường trong khi so sánh.
4 public boolean equalsIgnoreCase(String s2) Trả về true nếu giá trị của chuỗi s2 bằng giá trị chuỗi đang xét, trả về false nếu ngược lại. Không phân biệt chữ hoa và chữ thường trong khi so sánh.

5

public int length() Trả về độ dài của chuỗi đang xét.
6 public String replace(char oldChar, char newChar) Thay thế ký tự oldChar bằng ký tự newChar.
7 public String substring(int begin)
public String substring(int begin)
Lấy ra chuỗi con từ vị trí begin đến hết chuỗi, hoặc từ vị trí begin đến vị trí end.
8 public int indexOf(String str) Kiểm tra sự tồn tại của chuỗi str trong chuỗi đang xét. Nếu có, trả về vị trí đầu tiên của sự xuất hiện, nếu không trả về -1.
9 public String toUpperCase() Chuyển tất cả ký tự trong chuỗi đang xét thành ký tự hoa.
10 public String toLowerCase() Chuyển tất cả ký tự trong chuỗi đang xét thành ký tự thường.
11 public String toString() Trả về giá trị của chuỗi đang xét. Trong 1 vài trường hợp, bạn có thể override lại để sử dụng đúng mục đích.
12 public String trim() Trả về chuỗi đã được loại bỏ khoảng trắng.

Dưới đây là 1 ví dụ về việc sử dụng 1 số hàm thông dụng trong Java. Khi sử dụng, lưu ý đến kiểu trả về và đối số truyền vào hàm để có kết quả chính xác.

package TestString;

import java.lang.*;

public class main {
	
	public static void main(String[] args) {
		
		String s = "STDIO";
		
		// Access a single character at specific index
		System.out.println("1. s[3] = " + s.charAt(3));
		
		// Concatenate 2 strings
		System.out.println("2. Concatenate 2 strings: ");
		s = s.concat("-LAPTRINHJAVA");
		System.out.println(s);
		
		// Compare 2 strings
		if(s.equals("Im Michael"))
			System.out.println("3. Equal strings!");
		else
			System.out.println("3. Not equal strings!");
		
		// Get length of string
		System.out.println("4. Length of s: " + s.length());
		
		// Replace characters from string
		System.out.println("5. Replacing - by _ from s: " + s.replace('-', '_'));	
	}
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024