Skip to main content

Java String class - Lớp String trong Java

1. Khái niệm

String là một chuỗi các ký tự. Lớp String cung cấp hàng loạt các phương thức để thao tác với các chuỗi. Nó cung cấp các phương thức khởi tạo (constructor) khác nhau.

Package: java.lang

new String(byte[] byte_arr);
new String(byte[] byte_arr, Charset char_set)
new String(byte[] byte_arr, String char_set_name)
new String(byte[] byte_arr, int start_index, int length)
new String(byte[] byte_arr, int start_index, int length, Charset char_set)
new String(byte[] byte_arr, int start_index, int length, String char_set_name)
new String(char[] char_arr)
new String(char[] char_array, int start_index, int count)
new String(int[] uni_code_points, int offset, int count)
new String(StringBuffer s_buffer)
new String(StringBuilder s_builder)

Lớp String thuộc gói java.lang

Lớp java.lang.String được implements từ các interface Serializable, Comparable and CharSequence.

string-hierachy.png

Ví dụ:

String str1 = new String( );
//str1 chứa một dòng trống.
String str2 = new String("Hello World");
//str2 chứa dòng "Hello World"
char ch[] = {'A','B','C','D','E'};
String str3 = new String(ch);
//str3 chứa "ABCDE"
String str4 = new String(ch,0,2);
//str4 chứa "AB" vì 0- tính từ ký tự bắt đầu,  2- là số lượng ký tự kể từ ký tự bắt đầu.
2. String pool

Một chương trình Java có thể chứa nhiều chuỗi bằng chữ. "String Pool" đại diện cho tất cả các chữ được tạo trong chương trình. Mỗi khi một chuỗi bằng chữ được tạo, String Pool tìm kiếm để nhìn thấy nếu chuỗi bằng chữ tồn tại. Nếu nó tồn tại, một thể hiện mới được gán đến một chuỗi mới.

Ví dụ:

String day = "Monday";
String weekday = "Monday";

Ở đây, một thể hiện cho biến "day", biến đó có giá trị là "Monday", được tạo trong String Pool. Khi chuỗi bằng chữ "weekday" được tạo, việc lưu giữ các giá trị giống nhau như của biến "day", một thể hiện đang tồn tại được gán đến biến "weekday". Vì cả hai biến "day" và "weekday" cũng đều nhằm chỉ vào chuỗi tương tự trong String Pool.

Hình ảnh sau minh hoạ khái niệm của "String Pool".

Theo ví dụ trên, chỉ có một đối tượng chuỗi “Monday” được tạo ra. Biến dayweekday được tham chiếu đến đối tượng chuỗi “Monday”.

3. Các phương thức lớp String

Trong phần này, chúng ta sẽ xem xét các phương thức của lớp String.

+ charAt()

Phương thức này trả về một ký tự tại một vị trí đặc biệt trong một chuỗi.

Ví dụ:

String name = new String("Java Language");
char ch = name.charAt(5);

Biến "ch" chứa giá trị "L", từ đó vị trí các số bắt đầu từ 0.

+ startsWith()

Phương thức này trả về giá trị kiểu logic (Boolean), phụ thuộc vào chuỗi có bắt đầu với một giá trị đặc biệt không.

Ví dụ:

String strname = "Java Language";
boolean flag = strname.startsWith("Java");

Biến "flag" chứa giá trị true.

+ endsWith()

Phương thức này trả về một giá trị kiểu logic (boolean), có chăng phụ thuộc vào chuỗi kết thúc với một giá trị đặc biệt.

Ví dụ:

String strname = "Java Language";
boolean flag = strname.endsWith("Java");

Biến "flag" chứa giá trị false.

+ copyValueOf()

Phương thức này trả về một chuỗi được rút ra từ một mảng ký tự được truyền như một đối số. Phương thức này cũng lấy hai tham số nguyên. Tham số đầu tiên chỉ định vị trí từ nơi các ký tự phải được rút ra, và tham số thứ hai chỉ định số ký tự được rút ra từ mảng.

Ví dụ:

char name[] = {'L','a','n','g','u','a','g','e'};
String subname = String .copyValueOf(name,5,2);

Bây giờ biến "subname" chứa chuỗi "ag".

+ toCharArray()

Phương thức này lấy một chuỗi, và chuyển nó vào một mảng ký tự. Ví dụ:

String text = new String("Hello World");
Char textArray[] = text.toCharArray();

+ indexOf()

Phương thức này trả về thứ tự của một ký tự đặc biệt, hoặc một chuỗi trong phạm vi một chuỗi. Các câu lệnh sau biểu diễn các cách khác nhau của việc sử dụng hàm.

String day = new String("Sunday");
int index1 = day.indexOf('n');
//chứa 2

int index2 = day.indexOf('z',2);
//chứa –1 nếu "z" không tìm thấy tại vị trí 2.

int index3 = day.indexOf("Sun");
//chứa mục 0 của mẫu

+ toUpperCase()

Phương thức này trả về chữ hoa của chuỗi thông qua hàm.

String lower = new String("good morning");
System.out.println("Uppercase: "+lower.toUpperCase( ));

+ toLowerCase()

Phương thức này trả về chữ thường của chuỗi thông qua hàm.

String upper = new String("LAPTRINH.VN");
System.out.println("Lowercase: "+upper.toLowerCase( ));

+ trim()

Phương thức này cắt bỏ khoảng trắng trong đối tượng String. Hãy thử đoạn mã sau để thấy sự khác nhau trước và sau khi cắt bỏ khoảng trắng.

String space = new String(" Spaces ");
System.ut.println(spaces);
System.out.println(spaces.trim()); //Sau khi cắt bỏ khoảng trắng

+ equals()

Phương thức này so sánh nội dung của hai đối tượng chuỗi.

String name1 = "Laptrinh.vn", name2 = "LAPTRINH.VN";
boolean flag = name1.equals(name2);

Biến "flag" chứa giá trị false.

4. Các phương thức của lớp String trong Java
SN Methods Description
1 char charAt(int index) Trả về một ký tự tại vị trí có chỉ số được chỉ định.
2 int compareTo(Object o) So sánh một String với một Object khác.
3 int compareTo(String anotherString) So sánh hai chuỗi theo từ điển. (Phân biệt chữ hoa chữ thường)
4 int compareToIgnoreCase(String str) So sánh hai chuỗi theo từ điển. (Không phân biệt chữ hoa chữ thường)
5 String concat(String str) Nối chuỗi được chỉ định đến cuối của chuỗi này.
6 boolean contentEquals(StringBuffer sb) Trả về true nếu và chỉ nếu chuỗi này đại diện cho cùng một chuỗi ký tự như là StringBuffer quy định.
7 static String copyValueOf(char[] data) Trả về một chuỗi đại diện cho chuỗi ký tự trong mảng quy định.
8 static String copyValueOf(char[] data, int offset, int count) Trả về một chuỗi đại diện cho chuỗi ký tự trong mảng quy định.
9 boolean endsWith(String suffix) Kiểm tra nếu chuỗi này kết thúc với hậu tố quy định.
10 boolean equals(Object anObject) So sánh với một đối tượng
11 boolean equalsIgnoreCase(String anotherString) So sánh với một String khác, không phân biệt chữ hoa chữ thường.
12 byte[] getBytes() Mã hóa chuỗi này thành một chuỗi các byte bằng cách sử dụng bảng mã mặc định của flatform (nền tảng), lưu trữ kết quả vào một mảng byte mới.
13 byte[] getBytes(String charsetName) Mã hóa chuỗi này thành một chuỗi các byte bằng cách sử dụng bảng mã cho trước, lưu trữ kết quả vào một mảng byte mới.
14 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Copy các ký tự từ chuỗi này vào mảng ký tự đích. 
15 int hashCode() Trả về một mã "hash code" cho chuỗi này.
16 int indexOf(int ch) Trả về chỉ số trong chuỗi này xuất hiện đầu tiên của ký tự cụ thể.
17 int indexOf(int ch, int fromIndex) Trả về chỉ số trong chuỗi này xuất hiện đầu tiên của ký tự được chỉ định, bắt đầu tìm kiếm từ chỉ số cụ thể đến cuối.
18 int indexOf(String str) Trả về chỉ số trong chuỗi này xuất hiện đầu tiên của chuỗi quy định.
19 int indexOf(String str, int fromIndex)
Trả về chỉ số trong chuỗi này xuất hiện đầu tiên của chuỗi quy định, bắt đầu từ chỉ số xác định.
20 String intern() Returns a canonical representation for the string object.
21 int lastIndexOf(int ch) Trả về chỉ số trong chuỗi này về sự xuất hiện cuối cùng của ký tự cụ thể.
22 int lastIndexOf(int ch, int fromIndex) Trả về chỉ số trong chuỗi này về sự xuất hiện cuối cùng của ký tự được chỉ định, tìm kiếm lùi lại bắt đầu từ chỉ số xác định.
23 int lastIndexOf(String str) Trả về chỉ số trong chuỗi này xảy ra cuối cùng bên phải của chuỗi quy định.
24 int lastIndexOf(String str, int fromIndex)
Trả về chỉ số trong chuỗi này về sự xuất hiện cuối cùng của chuỗi xác định, tìm kiếm lùi lại bắt đầu từ chỉ số xác định.
25 int length() Trả về độ dài chuỗi.
26 boolean matches(String regex) Kiểm tra chuỗi này khớp với biểu thức chính quy chỉ định hay không.
27 boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Kiểm tra chuỗi có một phần giống nhau.
28 boolean regionMatches(int toffset, String other, int ooffset, int len) Kiểm tra chuỗi có một phần giống nhau.
29 String replace(char oldChar, char newChar) Trả về một chuỗi mới từ thay thế tất cả các lần xuất hiện của ký tự oldChar trong chuỗi này với ký tự newChar.
30 String replaceAll(String regex, String replacement)
Thay thế tất cả các chuỗi con của chuỗi này khớp với biểu thức chính quy bởi String mới replacement
31 String replaceFirst(String regex, String replacement) Thay thế chuỗi con đầu tiên của chuỗi này khớp với biểu thức chính quy bởi một String mới replacement
32 String[] split(String regex) Tách chuỗi này thành các chuỗi con, tại các chỗ khớp với biểu thức chính quy cho trước.
33 String[] split(String regex, int limit) Tách chuỗi này thành các chuỗi con, tại các chỗ khớp với biểu thức chính quy cho trước. Tối đa limit chuỗi con.
34 boolean startsWith(String prefix) Kiểm tra nếu chuỗi này bắt đầu với tiền tố quy định.
35 boolean startsWith(String prefix, int toffset)
Kiểm tra nếu chuỗi này bắt đầu với tiền tố quy định bắt đầu một chỉ số xác định.
36 CharSequence subSequence(int beginIndex, int endIndex) Trả về một chuỗi ký tự mới là một dãy con của dãy này.
37 String substring(int beginIndex) Trả về một chuỗi ký tự mới là một dãy con của dãy này. Từ chỉ số cho trước tới cuối
38 String substring(int beginIndex, int endIndex) Trả về một chuỗi ký tự mới là một dãy con của dãy này. Từ chỉ số bắt đầu cho tới chỉ số cuối.
39 char[] toCharArray()
 
Chuyển chuỗi này thành mảng ký tự.
40 String toLowerCase()
 
Chuyển tất cả các ký tự của chuỗi này sang chữ thường, sử dụng miền địa phương mặc định (default locale)
41 String toLowerCase(Locale locale)
 
Chuyển tất cả các ký tự của chuỗi này sang chữ thường, sử dụng miền địa phương (locale) cho trước.
42 String toString() Trả về String này.
43 String toUpperCase() Chuyển tất cả các ký tự của chuỗi này sang chữ hoa, sử dụng miền địa phương mặc định (default locale)
44 String toUpperCase(Locale locale) Chuyển tất cả các ký tự của chuỗi này sang chữ hoa, sử dụng miền địa phương (locale) cho trước.
45 String trim() Trả về một String mới, sau khi loại bỏ các ký tự trắng (whitespace) bên trái và bên phải.
46 static String valueOf(primitive data type x) Returns the string representation of the passed data type argument.
5. Tính đối tượng và vừa có tính nguyên thủy của String

- Tính nguyên thủy:

Bạn có thể tạo một string literal (chuỗi chữ), string literal được lưu trữ trong ngăn xếp (stack), đòi hỏi không gian lưu trữ ít hơn khi thao tác.

String literal = "Hello World";

Bạn có thể sử dụng toán tử + để nối 2 string, toán tử này vốn quen thuộc và sử dụng cho các kiểu dữ liệu nguyên thủy int, float, double.

Các string literal được chứa trong một bể chứa (String pool). Như vậy hai string literal có nội dung giống nhau sử dụng chung một vùng bộ nhớ trên stack, điều này giúp tiết kiệm bộ nhớ.

- Tính đối tượng:

Vì String là một class, vì vậy nó có thể được tạo ra thông qua toán tử new.

String object = new String("Hello World");

Các đối tượng String được lưu trữ trên Heap, yêu cầu quản lý bộ nhớ phức tạp và tốn không gian lưu trữ. Hai đối tượng String có nội dung giống nhau lưu trữ trên 2 vùng bộ nhớ khác nhau của Heap.