Các lớp cơ sở và các cấu trúc dữ liệu trong ngôn ngữ lập trình Java
Nội dung: Cấu trúc mảng trong Java ; Các lớp cơ sở của Java trong gói java.lang: Object, Wrapper, Math Cấu trúc mảng truyền thống có các hạn chế: Rất khó kiểm soát khi chỉ số các phần tử vượt ra khỏi phạm vi ...
Nội dung:
- Cấu trúc mảng trong Java;
- Các lớp cơ sở của Java trong gói java.lang: Object, Wrapper, Math
Cấu trúc mảng truyền thống có các hạn chế:
- Chỉ số các phần tử của mảng trong C/C++ và Java được bắt đầu từ 0. Lỗi vượt ra ngoài phạm vi của mảng là rất khó kiểm soát.Việc quản lý bộ nhớ của các cấu trúc mảng cũng rất phức tạp, nếu không tổ chức tốt thì chương trình lớn có thể dễ bị dừng vì thiếu bộ nhớ.
- Trong Java, cấu trúc mảng là một lớp có biến dữ liệu thành phần công khai(public) length, xác định kích thước của mảng và có các phần tử với kiểu bất kỳ (nguyên thủy hoặc lớp đối tượng).
Khai báo các biến mảng
Các biến mảng có thể khai báo theo một trong hai dạng sau:
- Kích thước của mảng chưa xác định khi khai báo,
- Điều quan trọng cần phân biệt trong cấu trúc mảng của Java là việc khai báo biến mảng thì chưa hoàn toàn tạo ra cấu trúc đó mà mới khai báo cấu trúc để tham chiếu.
int mangInt[], bienInt; // (1) BongDen[] dayBong, hangBong; // (2)
Tạo lập đối tượng mảng
- Để tạo lập đối tượng mảng thì phải xác định số phần tử của mảng đó và phải sử dụng toán tử new.
<Tên mảng> = new <Kiểu các phần tử >[<Số phần tử>];
Trong đó <Kiểu các phần tử> là kiểu tương thích với kiểu mà mảng đã khai báo.
- Giá trị cực tiểu của <Số phần tử> là 0, nghĩa là trong Java có thể tạo ra mảng 0 phần tử.
Các biến mảng khai báo ở (1), (2) có thể được tạo lập như sau:
- Nhiều khi chúng ta có thể kết hợp cả khai báo với tạo lập mảng như sau:
<Kiểu các phần tử 1> <Tên mảng>[] = new <Kiểu các phần tử 2>[<Số phần tử>];
- Khai báo và tạo lập mảng <Tên mảng> kiểu <Kiểu các phần tử 1> để chứa <Số phầntử> các phần tử có <Kiểu các phần tử 2>.
- <Kiểu các phần tử 1> và <Kiểu các phần tử 2> là hai kiểu tương thích với nhau.
- Nếu mảng đó có kiểu nguyên thủy thì hai kiểu đó phải trùng nhau. Ngược lại, đối với kiểu lớp thì <Kiểu các phần tử 2> phải là lớp con của <Kiểu các phần tử 1>.
- Tất nhiên một lớp cũng được xem là lớp con của chính nó.
Khi một mảng được tạo lập thì tất cả các phần tử của nó được khởi tạo giá trị mặc định (0 hoặc 0.0 đối với kiểu số, false đối với kiểu boolean, null cho kiểu lớp).
float mangFloat[] = new float[20];// Các phần tử được gán trị mặc định
Object[] dayDen = new BongDen[5];// Các phần tử được gán mặc định null Khởi tạo các mảng
- Java cung cấp cơ chế cho phép khai báo, tạo lập và gán ngay các giá trị ban đầu cho các phần tử của mảng:
<Kiểu các phần tử >[] <Tên mảng> = {<Các giá trị ban đầu>};
int[] mangInt = {1, 3, 5, 7, 9};
Tạo ra mangInt có 5 phần tử với phần tử đầu có giá trị là 1 ( mangInt[0] = 1 ), phần tử thứ hai là 3 ( mangInt[1] = 3 ) , v.v.
Object[] dayDT = {new BongDen(), new BongDen(), null};
char[] charArr = {‘a’, ‘b’, ‘a’}; // mảng 3 ký tự và hoàn toàn khác với "aba"
Sử dụng mảng
Toàn bộ cấu trúc mảng được tham chiếu thông qua tên của mảng, còn các phần tử của nó có thể truy nhập được bởi toán tử [].Chỉ số các phần tử của mảng nhỏ nhất là 0 và nhỏ hơn kích thước của nó là <Tên mảng>.length. Phần tử thứ i của mảng là phần tử có chỉ số i - 1(<Tên mảng>[i-1]).
Ví dụ 4 Mô tả cách tạo ra năm mảng 15 các phần tử ngẫu nhiên và lưu lại năm giá trị cực tiểu của chúng để in ra màn hình.
class Mang { public static void main(String args[]){ // Khai báo và tạo lập mảng double[] mang1 = new double[5]; // (1) double[] mang2 = new double[15]; // (2) for(int j = 0; j < mang1.length; ++j){ // (3) randomize(mang2); // Tạo lập mảng ngẫu nhiên mang1[j] = cucTieu(mang2); // Tìm giá trị cực tiểu } // In các giá trị cực tiểu ra màn hình // (4) for(int j = 0; j < mang1.length; ++j){ System.out.println(mang1[j]); } } public static void randomize(double[] mang){ // (5) for(int j = 0; j < mang.length; ++j) mang[j] = Math.random() * 100.0; } public static double cucTieu(double[] mang){// (6) double giaTriMin = mang[0]; for(int j = 0; j < mang1.length; ++j) giaTriMin = Math.min(giaTriMin, mang[j]); return giaTriMin; } }
Mảng nhiều chiều
Các phần tử của mảng có thể tham chiếu tới các mảng khác. Trong Java, mảng của mảng (mảng nhiều chiều) được định nghĩa như sau:
hoặc
Toán tử [] có thể sử dụng ở cả hai vị trí,
int[][] mang1; // Mảng hai chiều tương đương với int mang1[][]; và cũng tương đương với int[] mang1[]; Thông thường chúng ta có thể kết hợp cả khai báo với thiết lập mảng nhiều chiều tương tự như đối với mảng đơn. int[][] mangA = new int[4][5]; // Ma trận có 4 hàng, 5 cột
Như thế mảng hai chiều còn được gọi là mảng của mảng. Phần tử thứ j của mangA[i], j = 1, 2, ..., 5 được truy nhập bởi mangA[i][j]. Do vậy, kích thước của mangA là mangA.length = 4 và mỗi phần tử của nó lại là mảng có kích thước là mangA[i].length = 5, i = 1, 2, ..., 4.
double[][] maTran = {
{1, 2, 3, 4}, // hàng 1
{0, 2, 0, 0}, // hàng 2
{0, 0, 3, 0}, // hàng 3
{0, 0, 0, 4}, // hàng 4
};
Các mảng trong mảng nhiều chiều không nhất thiết phải có số phần tử giống nhau.
mảng dayDen sau có 5 phần tử là các mảng có kích thước khác nhau.
BongDen[][] dayDen = { {new BongDen(),null,new BongDen()},// Hàng có 3 phần tử (1) {null, new BongDen()}, // Hàng có 2 phần tử (2) {}, // Hàng có 0 phần tử (3) {new BongDen()}, // Hàng có 3 phần tử (4) {null} // Hàng chưa được tạo lập (5) };
Như chúng ta đã khẳng định từ đầu, tất cả các lớp đều là lớp con củaObject, trong đó mảng cũng là lớp con của Object. Do vậy, giữa mảng và Object có thể thực hiện chuyển đổi kiểu:
- Chuyển từ kiểu mảng về Object (Mở rộng kiểu),
- Chuyển từ Object sang kiểu mảng ( Thu hẹp kiểu) .
class EpKieu{ static public void main(String[] args){ int[] a = new int[5]; Object o; o = a; // int[] là con của Object int[] b = new int[5]; b = (int[])o; // Xem đối tượng của Object như là mảng int[] } }
Ngoài ra cũng cần lưu ý thêm là cấu trúc mảng bảo toàn cấu trúc phân cấp giữa các lớp, nghĩa là nếu B là lớp con của lớp A thì B[] cũng là lớp con của lớp A[].
Các lớp cơ bản, hay sử dụng của Java như: Object, các lớp Wrapper (lớp bao gói hay lớp nguyên thủy), Math, String và lớp StringBuffer. Những lớp này được xây dựng trong gói java.lang luôn mặc định được nạp vào chương trình. Tất cả đều là lớp con của Object và được xây dựng theo cấu trúc như trong hình H4-1.
Các kiểu nguyên thủy trong Java
Lớp Object
Tất cả các lớp được xây dựng trong các chương trình Java đều hoặc là trực tiếp hoặc gián tiếp là mở rộng của Object. Đây là lớp cơ sở nhất, định nghĩa hầu như tất cả những hàm thành phần cơ sở để các lớp con cháu của nó sử dụng trực tiếp hoặc viết đè như đã đề cập ở chương 3.
Object cung cấp các hàm sau:
- int hashCode() Khi các đối tượng được lưu vào các bảng băm (hash table), hàm này có thể sử dụng để xác định duy nhất giá trị cho mỗi đối tượng. Điều này đảm bảo tính nhất quán của hệ thống khi thực hiện chương trình.
- Class getClass() Trả lại tên lớp của đối tượng hiện thời.
- boolean equals(Object obj) Cho lại kết quả true khi đối tượng hiện thời và obj là cùng một đối tượng. Hàm này thường được viết đè ở các lớp con cho phù hợp với ngữ cảnh so sánh bằng nhau trong các lớp mở rộng đó.
- protected Object clone() throws CloneNotSupportedException Đối tượng mới được tạo ra có cùng các trạng thái như đối tượng hiện thời khi sử dụng clone(), nghĩa là tạo ra bản copy mới của đối tượng hiện thời.
- String toString() Nếu các lớp con không viết đè hàm này thì nó sẽ trả lại dạng biểu diễn văn bản (textual) của đối tượng. Hàm println() ở lớp PrintStream sẽ chuyển các đối số của nó sang dạng văn bản khi sử dụng hàm toString().
- protected void finalize() throws Throwable Hàm này được gọi ngay trước khi đối tượng bị dọn vào “thùng rác”, nghĩa là trước khi đối tượng đó bị huỷ bỏ.
Các lớp nguyên thủy (Wrapper)
Các giá trị nguyên thủy không phải là đối tượng trong Java. Để có thể thao tác được trên các giá trị nguyên thủy (giá trị số và giá trị logic) thì gói java.lang cung cấp các lớp bao gói (Wrapper) cho từng kiểu dữ liệu nguyên thủy (gọi tắt là lớp nguyên thủy). Các lớp nguyên thủy có những đặc tính chung sau:
- Các toán tử tạo lập chung. Các lớp nguyên thủy (trừ lớp Character chỉ có một toán tử tạo lập) đều có hai toán tử tạo lập: Toán tử tạo lập sử dụng giá trị nguyên thủy để tạo ra đối tượng tương ứng
Character charObj = new Character(‘a’);
Boolean boolObj = new Boolean(true);
Integer intObj = new Integer(2002);
Float floatObj = new Float(3.14F);
Double doubleObj = new Double(3.14);
- Toán tử thứ hai: chuyển các đối tượng lớp String biểu diễn cho các giá trị nguyên thủy về các lớp tương ứng. Các toán tử này sẽ cho qua NumberFormatException khi tham biến kiểu String không hợp lệ.
Boolean boolObj = new Boolean("true");
Integer intObj = new Integer("2002");
Float floatObj = new Float("3.14F");
Double doubleObj= new Double("3.14");
Có các hàm tiện ích chung: valueOf(String s), toString(), typeValue(), equals().
- Mỗi lớp (trừ lớp Character) đều định nghĩa hàm static valueOf(String s) trả lại đối tượng tương ứng. Các hàm này đều cho qua NumberFormatException khi tham biến kiểu String không hợp lệ.
Boolean boolObj = Boolean.valueOf("true"); Integer intObj = Integer.valueOf("2002"); Float floatObj = Float.valueOf(“3.14F”); Double doubleObj= Double.valueOf("3.14");
- Các lớp viết đè hàm toString() trả lại là các đối tượng String biểu diễn cho các giá trị nguyên thủy ở dạng xâu.
String charStr = charObj.toString(); // "a" String boolStr = boolObj.toString(); // "true" String intStr = intObj.toString(); // "2002" String doubleStr = doubleObj.toString(); // "3.14"
- Các lớp định nghĩa hàm typeValue() trả lại các giá trị nguyên thủy tương ứng với các đối tượng nguyên thủy.
boolean b = boolObj.charValue(); // true int i = intObj.intValue(); // 2002 float f = floatObj.floatValueOf(); // 3.14F double d = doubleObj.doubleValueOf(); // 3.14 char c = charObj.charValue(); // ‘a’
- Các lớp viết đè hàm equals() để thực hiện so sánh bằng nhau của các đối tượng nguyên thủy.
Character charObj = new Character(‘a’); boolean charTest = charObj.equals(‘b’); // false Integer intObj1 = Integer.valueOf("2010"); boolean intTest = intObj.equals(intObj1); // false
Lớp Boolean
Lớp Character
Lớp Character định nghĩa hai giá trị cực tiểu, cực đại Character.MIN_VALUE, Character.MAX_VALUE và các giá trị kiểu ký tự Unicode. Ngoài ra lớp này còn định nghĩa một số hàm static để xử lý trên các ký tự:
- static boolean isLowerCase(char ch)// true nếu ch là ký tự thường
- static boolean isUpperCase(char ch)// true nếu ch là ký tự viết hoa
- static boolean isDigit(char ch) // true nếuch là chữ số
- static boolean isLetter(char ch)// true nếu ch là chữ cái
- static boolean isLetterOrDigit(char ch) // true nếu ch là chữ hoặc là số
- static char toUpperCase(char ch)// Chuyển ch về chữ viết hoa
- static char toLowerCase(char ch)// Chuyển ch về chữ viết thường
- static char toTitleCase(char ch)// Chuyển ch về dạng tiêu đề.
Các lớp nguyên thủy
- Các lớp Byte, Short, Integer, Long, Float, Double là các lớp con của lớp Number. Trong các lớp này đều xác định hai giá trị:
- <Lớp nguyên thủy>.MIN_VALUE
- <Lớp nguyên thủy>.MAX_VALUE
- là các giới hạn của các số trong kiểu đó.
byte minByte = Byte.MIN_VALUE; // -128
int maxInt = Integer.MAX_VALUE; // 2147483647
Trong mỗi lớp nguyên thủy có hàm typeValue() để chuyển các giá trị của các đối tượng nguyên thủy về giá trị số:
byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()
Trong mỗi lớp nguyên thủy còn có hàm static parseType(String s) để chuyển các giá trị được biểu diễn dưới dạng xâu về các giá trị số:
byte value1 = Byte.parseByte("16");
int value2 = Integer.parseInt("2002");
double value3 = Double.parseDouble("3.14");
import java.io.*; class SapXep{ static int[] day; static void nhap(){ String str; int n = day.length; DataInputStream stream = new DataInputStream(System.in); System.out.println("Nhap vao " + n + " so nguyen"); for (int k = 0; k < n; k++){ try{ System.out.print(k + ": "); str = stream.readLine(); day[k] = Integer.valueOf(str).intValue(); }catch(IOException e){ System.err.println("I/O Error!"); } } } static void hienThi(){ int n = day.length; for (int k = 0; k < n; k++) System.out.print(day[k] + " "); System.out.println(); } static void sapXep(){ int x, max, k; for(int i =day.length-1; i > 0; i--){ max = day[i];k = i; for (int j = 0; j < i; j++) if (max < day[j]){ max = day[j]; k = j; } day[k] = day[i]; day[i] = max; } } public static void main(String[] args){ String str; int n; DataInputStream stream = new DataInputStream(System.in); System.out.print(" Cho biet bao nhieu so nhap vao: "); try{ str = stream.readLine(); }catch(IOException e){ System.err.println("I/O Error!"); str = "0"; } n = Integer.valueOf(str).intValue(); SapXep.day = new int[n]; nhap(); sapXep(); System.out.println("Day so duoc sap xep: "); hienThi(); } }
Lớp Void
Lớp này ký hiệu cho đối tượng của lớp Class biểu diễn cho giá trị void.
Lớp Math
- Lớp final class Math định nghĩa một tập các hàm tĩnh để thực hiện các chức năng chung của toán học như các phép làm tròn số, sinh số ngẫu nhiên, tìm số cực đại, cực tiểu, v.v.
- Lớp final class Math còn cung cấp những hằng số như số e (cơ số của logarithm), số pi thông qua Math.E và Math.PI.
- Các hàm làm tròn và xử lý các giá trị giới hạn
static int abs(int i)
static long abs(long l)
static float abs(float f)
static double abs(double d)
- Hàm abs() được nạp chồng để trả lại giá trị tuyệt đối của đối số.
static double ceil(double d)
- Hàm ceil() trả lại giá trị nhỏ nhất kiểu double mà không nhỏ hơn đối số và lại bằng số nguyên.
ceil(3.14) cho giá trị 4.0 là số trần trên của đối số.
static double floor(double d)
- Hàm floor() trả lại giá trị lớn nhất kiểu double mà không lớn hơn đối số và lại bằng số nguyên.
floor(3.14) cho giá trị 3.0 là số sàn dưới của đối số.
static int round(float f d)
static long round(double d)
- Hàm round() được nạp chồng để trả lại số nguyên gần nhất của đối số.
static int max(int a, int b)
static long max(long a, long b)
static float max(float a, float b)
static double max(double a, double b)
- Hàm max() được nạp chồng để trả lại giá trị cực đại của hai đối số.
static int min(int a, int b)
static long min(long a, long b)
static float min(float a, float b)
static double min(double a, double b)
- Hàm min() được nạp chồng để trả lại giá trị cực tiểu của hai đối số.
Các hàm lũy thừa
static double pow(double d1, double d2)
- Hàm pow() trả lại giá trị là lũy thừa của d1 và d2 (d1d2).
static double exp(double d)
- Hàm exp() trả lại giá trị là luỹ thừa cơ số e và số mũ d (ed).
static double log(double d)
- Hàm log() trả lại giá trị là lô-ga-rit tự nhiên (cơ số e) của d.
static double sqrt(double d)
- Hàm sqrt() trả lại giá trị là căn bậc hai của d , hoặc giá trị NaN nếu đối số âm.
Các hàm lượng giác
static double sin(double d)
- Hàm sin() trả lại giá trị là sine của góc d được cho dưới dạng radian.
static double cos(double d)
- Hàm cos() trả lại giá trị là cose của góc d được cho dưới dạng radian.
static double tan(double d)
- Hàm tan() trả lại giá trị là tangent của góc d được cho dưới dạng radian.
Hàm sinh số ngẫu nhiên
static double random()
- Hàm random() cho lại giá trị là số ngẫu nhiên trong khoảng từ 0.0 đến 1.0.
Việc xử lý các xâu ký tự trong Java được hỗ trợ bởi hai lớp String và StringBuffer. Lớp String dùng cho những xâu ký tự bất biến, nghĩa là những xâu chỉ đọc và khi du?c khởi tạo giá trị đầu tiên sau đó không thay đổi. Lớp StringBuffer được sử dụng đối với những xâu ký tự động, có thể thay đổi tùy ý.
Tạo lập và khởi tạo các xâu
- Lớp final class String có một số toán tử tạo lập và khởi tạo giá trị của các đối tượng của lớp String dựa trên các kiểu của các đối số.
- Riêng đối với lớp String trong Java còn sử dụng cách tạo lập và khởi tạo xâu theo cách truyền thống (không sử dụng toán tử tạo lập) dựa vào dãy các ký tự như:
String str = “Dung dong den toi”;
- Các cách tạo lập khác đều sử dụng các toán tử tạo lập String() được nạp chồng theo các đối số.
String(String s)
String(<Kieu>[] mang)
String(StringBuffer buf)
byte[] bytes = {97, 98,98,97};
char[] characters = {‘a’, ‘b’, ‘b’,‘a’};
StringBuffer buff = new StringBuffer("abba");
String byteStr = new String(bytes);// Chuyển mảng bytes về xâu
String charStr = new String(charactes);
String buffStr = new String(buff);
String str = new String("abba");
Đọc từng ký tự trong xâu
int length()
Hàm length() cho kết quả là số các ký tự trong xâu còn được gọi là kích thước của xâu.
char charAt(int index)
Hàm charAt(int index) cho lại ký tự thứ index (bắt đầu từ 0) của xâu hiện thời (0 ≤ index ≤ length()) . Nếu index vượt ra khỏi phạm vi xác định thì hệ thống sẽ cho qua ngoại lệ StringIndexOutOfBoundsException.
Sử dụng các hàm length() và charAt() để đếm số lần lặp của các ký tự trong xâu, kể cả dấu cách.
public class Dem{ public static void main(String[] args){ int[] mangDem = new int[Character.MAX_VALUE]; String str = "Khong duoc dung den toi!"; for (int i = 0; i < str.length(); i++) // (1) try{ mangDem[str.charAt(i)]++; // (2) }catch(StringIndexOutOfBoundsException e){ System.out.println("Chi so vuot khoi gioi han"); } for (int i = 0; i < mangDem.length; i++) if (mangDem[i] != 0) System.out.println((char)i + ':" + mangDem[i]); } }
So sánh các xâu
- Các ký tự được so sánh dựa trên các giá trị mã Unicode. Hai xâu được so sánh theo thứ tự từ điển bằng cách so sánh hai ký tự tương ứng của hai xâu đó. Xâu “abba” đứng trước (nhỏ hơn) xâu “aha” vì ký tự thứ hai của xâu “abba” là ‘b’ đứng trước ‘h’ của “aha”.
- Trong lớp String có những hàm sau được sử dụng để so sánh các xâu.
boolean equals(Object obj) boolean equalsIgnoreCase(String str2)
- Hàm equals() được viết đè ở String để kiểm tra xem đối tượng lớp String và đối tượng ở tham số có cùng tập các ký hiệu hay không. Tương tự hàm equalsIgnoreCase() thực hiện so sánh, nhưng không phân biệt các trường hợp chữ thường, chữ hoa.
boolean startWith(String str) boolean endWith(String str)
- Hai hàm này cho kết quả true nếu xâu bắt đầu (kết thúc) bằng đối số str.
int compareTo(String str2) int compareTo(Object obj)
Hàm compareTo() đầu thực hiện só sánh hai xâu và trả lại kết quả dựa vào kết quả đối sánh:
- 0 nếu xâu hiện thời bằng xâu đối số,
- Giá trị nhỏ hơn 0, nếu xâu đó nhỏ hơn xâu đối số theo thứ tự từ điển,
- Giá trị lớn hơn 0, nếu xâu đó lớn hơn xâu đối số theo thứ tự từ điển,
- Hàm compareTo() thứ hai thực hiện tương tự như như hàm đầu nếu đối số là chuyển về được đối tượng xâu, ngược lại sẽ cho qua để xử lý ngoại lệ ClassCastException.
String strA = new String("Ha Noi, Viet Nam"); String strB = new String("Ha noi, Viet nam"); boolean b1 = strA equals(strB); // false boolean b2 = strA equalsIgnoreCase(strB); // true String str1 = new String("abba"); String str2 = new String("aha"); int compVal = str1.compareTo(str2);// Giá trị âm vì str1<str2
Chuyển đổi các trường hợp của ký tự
- Để chuyển các ký tự viết thường về chữ viết hoa hoặc ngược lại, chúng ta sử dụng những hàm sau:
String toUpperCase() String toLowerCase()
String strA = new String("Ha Noi, Viet Nam"); String strB = new String("ha noi, viet nam"); String str1 = strA.toUpperCase(); String str2 = strB.toLowerCase(); boolean b1 = str1 == strA; // false String str2 = str2 == strB; // true
Ghép các xâu
- Ghép hai xâu cho kết quả là một xâu, trong đó các ký tự của xâu đầu đứng trước các ký tự của xâu thứ hai. Phép ghép không có tính giao hoán. Như ở các phần trước chúng ta đã thấy, phép + được nạp chồng để thực hiện phép ghép của các xâu. Ngoài ra chúng ta còn có thể sử dụng hàm thành phần của lớp String: String concat(String str)
String tin = "Hoc lap trinh "; tin = tin + "huong doi tuong "; tin = tin.concat("voi Java!");
Kết quả cho xâu mới: "Hoc lap trinh huong doi tuong voi Java!".
Tìm các ký tự và các xâu con
Những hàm sau được nạp chồng để tìm chỉ số của ký tự hay chỉ số bắt đầu, chỉ số cuối của một xâu con. Nếu không tìm được các hàm này sẽ cho kết quả là -1.
- int indexOf(int ch) Tìm chỉ số của lần xuất hiện đầu tiên của ch trong xâu.
- int indexOf(int ch, int fromIndex) Tìm chỉ số của lần xuất hiện đầu tiên của ch trong xâu bắt đầu từ fromIndex.
- int indexOf(String str) Tìm chỉ số của lần xuất hiện đầu tiên của xâu con str trong xâu hiện thời.
- int indexOf(String str, int fromIndex) Tìm chỉ số của lần xuất hiện đầu tiên của xâu con str bắt đầu từ fromIndex trong xâu hiện thời.
- int lastindexOf( int ch)Tìm chỉ số của lần xuất hiện cuối cùng của ký tự ch trong xâu.
- int lastindexOf(int ch, int fromIndex) Tìm chỉ số của lần xuất hiện cuối cùng của
- ch bắt đầu từ fromIndex trong xâu.
- int lastindexOf(String str) Tìm chỉ số của lần xuất hiện cuối cùng của xâu con str trong xâu hiện thời.
- int lastindexOf(String str, int fromIndex) Tìm chỉ số của lần xuất hiện cuối cùng của xâu con str bắt đầu từ fromIndex trong xâu hiện thời.
- String replace(char cu, char moi) Thay tất cả các lần xuất hiện của ký tự cu bằng ký tự moi trong xâu.Trích ra các xâu con
- String trim() Hàm này được sử dụng để tạo ra một xâu mới, trong đó các ký tự “trắng” (những ký tự có giá trị nhỏ hơn giá trị dấu cách ‘ ‘) ở trong xâu đều bị loại bỏ.
- String substring(int startIndex) Cho kết quả là một xâu con được triết ra từ vị trí startIndex đến cuối của xâu.
- String substring(int startIndex, int endIndex) Cho kết quả là một xâu con được triết ra từ vị trí startIndex đến vị trí endIndex của xâu. Nếu chỉ số không tương thích (vượt ra ngoài phạm vi xác định) thì cho qua ngoại lệ StringIndexOutOfBoundsException.
String cau = " Java Applet "; cau = cau.trim(); // "Java Applet" cau = cau.substring(5); // "Applet" cau = cau.substring(2,4); // "ple"
Chuyển các đối tượng của Object về String
- Lớp String viết đè hàm toString() của lớp Object để tự trả lại đối tượng của lớp String. Đồng thời nó còn có các hàm nạp chồng valueOf() để chuyển các giá trị số về dạng xâu ký tự.
static String valueOf(Object obj) static String valueOf(char[] characters)
- Hai hàm này được nạp chồng để chuyển các đối tượng obj và mảng các ký tự characters về xâu ký tự.
static String valueOf(boolean b) static String valueOf(char c)
- Hàm đầu được nạp chồng để chuyển hai giá trị boolean: true, false về xâu ký tự “true”, “false” tương ứng.
static String valueOf(int i) static String valueOf(long l) static String valueOf(float f) static String valueOf(double d)
- Các hàm này được nạp chồng để chuyển các giá trị số về dạng xâu ký tự.
- Xây dựng lớp phân số có các hàm:
- Thực hiện các phép +,-,*,/ trên các phân số
- Những dòng lệnh nào trong số các câu lệnh sau là không hợp lệ?
-
int [] i[]={{1, 2}, {1},{}, {1, 2, 3}} ;
-
int i[]= new int [2] {1, 2};
- Viết chương trình tính giá trị của số pi:
-
pi=4*(1-1/3+1/5-1/7+...)
- Xây dựng lớp HocSinh có các thuộc tính mô tả: họ tên, địa chỉ, ngày sinh và các hàm thành phần mô để:
- Nhập và hiển thị các thông tin về học sinh;
- Tìm kiếm theo họ hoặc theo tên gọi của khách hàng;
- Tìm theo địa chỉ và không phân biệt chữ hoa chữ thường