Friday, August 14, 2015

Bài 11 - String class , Array List và Vector

OK như vậy là chúng ta đã đi qua 10 bài hướng dẫn trong loạt tutorial này .
Hôm nay mình sẽ giới thiệu cho các bạn thêm kiến thức về String class , trong bài 4 mình chưa hướng dẫn .
Và cách sử dụng mảng động Array List và Vector.
I.String class
String thuộc lớp java.lang.String , là một lớp model phạm vi sử dụng của các charactor tạo thành chuỗi. Các method được cung cấp trong lớp này đó là :
* Bạn có thể tạo mới một chuỗi String bằng cách .
String newString = new String(stringLiteral);// gọi tới contructors
String message = new String("Welcome to Java"); // gọi contructors có tham số
char[] charArray = {'G', 'o', 'o', 'd', ' ', 'D', 'a', 'y'};// khai báo từ mảng char
String message = new String(charArray);
Khi khai báo một chuỗi String kiểu này thì nó sẽ tạo ra trên bộ nhớ vật lý một vùng nhớ để lưu dữ . Và vùng nhớ này không thay đổi được dữ liệu nữa.
Nên nếu bạn thực hiện cộng chuỗi thì nó sẽ tạo ra một ô nhớ khác , chưa giá trị vừa cộng .
Ví dụ :tạo 2 chuỗi String
String s = "Java";
s = "HTML";
Tương tự như vậy , nếu các chuỗi giống nhau sẽ trỏ tới 1 vùng nhớ chứa giá trị chuỗi đó.
* So sánh chuỗi:
Có các cách so sánh chuỗi như sau :
if (string1 == string2)// dùng toán tử ==
  System.out.println("string1 and string2 are the same object");
else
  System.out.println("string1 and string2 are different objects");
Dùng method equals()
if (string1.equals(string2))
  System.out.println("string1 and string2 have the same contents");
else
  System.out.println("string1 and string2 are not equal");
Dùng method compareTo()
s1.compareTo(s2)
* Lấy độ dài của chuỗi và trích dẫn ký tự trong chuỗi
Để lấy được độ dài chuỗi : 
String message = "xin chao";
message.length();
Lấy được ký tự thứ i trong chuỗi :
s.charAt(index);// int index
String message = "Welcome to Java";
message.charAt(0); // result :'W'
*Cộng chuỗi :
Chúng ta có các phương pháp sau :
String s3 = s1.concat(s2);// dùng method concat()
String s3 = s1 + s2; // Dùng toán tử cộng
String myString = message + " and " + "HTML"; // cộng trực tiếp chuỗi.
* Lấy chuỗi con:
Để lấy một chuỗi con từ chuỗi mẹ , thì ta dùng method subString(...)
- public String substring(int beginIndex, int endIndex) : Return chuỗi từ ký tự thứ beginIndex tới ký tự endIndex của chuỗi mẹ
public String substring(int beginIndex) : Returm chuỗi con bắt đầu từ ký tự thứ beginIndex tới hết chuỗi của chuỗi mẹ.
Ví dụ :
String message = "Welcome to Java".substring(0, 11) + "HTML";
* Ký tự hoa , thường , Thay chuỗi:
Dùng 2 method toLowerCase and toUpperCase Để chuyển đổi 
Ví dụ :

S
"Welcome".toLowerCase() returns a new string, welcome.
"Welcome".toUpperCase() returns a new string, WELCOME.
"  Welcome".trim() returns a new string, Welcome.
"Welcome".replace('e' , 'A') returns a new string, WAlcomA.
"Welcome".replaceFirst("e" , "A") returns a new string, WAlcome.
"Welcome".replaceAll("e" , "A") returns a new string, WAlcomA.
II. Sử dụng StringBuffer & StringBuilder
Hai class này rất hữu dụng trong việc thay thế cũng như thao tác với chuỗi String.
StringBuilder
StringBuffer
Không có cơ chế đồng bộ
Có cơ chế đồng bộ
Không thể xử lý nhiều luồng một lúc
Có thể nhiều luồng truy nhập một lúc
Xử lý chuỗi nhanh hơn
Xử lý chuỗi chậm hơn
StringBuffer strBuf = new StringBuffer();
strBuf.append("Welcome");
strBuf.append(' ');
strBuf.append("to");
strBuf.append(' ');
strBuf.append("Java");
Hoặc insert vào một vị trí nào đó :
strBuf.insert(11, "HTML and ");
Hay thay đổi :
strBuf.delete(8, 11) changes the buffer to Welcome Java.
strBuf.deleteCharAt(8) changes the buffer to Welcome o Java.
strBuf.reverse() changes the buffer to avaJ ot emocleW.
strBuf.replace(11, 15, "HTML") changes the buffer to Welcome to HTML.
strBuf.setCharAt(0, 'w') sets the buffer to welcome to Java.
Ngoài ra StringBuffer còn cung cấp 1 method : reverse() . Đảo ngược chuỗi :
StringBuffer strBuf1 = strBuf.reverse();
* Nó có thể làm việc với các method :toString, capacity, length, setLength , charAt .. . giống như chuỗi String.
Tương tự như vậy với cách sử dụng StringBuilder.
Sau đây mình sẽ có một ví dụ so sánh tốc độ của StringBuilder , StringBuffer và String để các bạn dễ hình dung .
package nosoft.com;
import java.util.Date;
/**
 * 
 * @author nosoft
 *
 */
public class DemoString {
 public void demoStringBuffer(int i){
  long start = 0, end = 0;
  start = System.currentTimeMillis();
  System.out.println("start :" + start );
  while(i <100000){
   StringBuffer a = new StringBuffer("aaaa");
//   String b = "bbbbb";
   a.append("b");
   end = System.currentTimeMillis();
   i++;
  }
  System.out.println( "result : " + (end - start));
 }
 public void demoStringBuilder(int i){
  long start = 0, end = 0;
  start = System.currentTimeMillis();
  System.out.println("start :" + start );
  while(i <100000){
   StringBuilder a = new StringBuilder("aaaa");
//   String b = "bbbbb";
   a.append("b"); 
   end = System.currentTimeMillis();
   i++;
  }
  System.out.println( "result : " + (end - start));
 }
 public void demoString(int i){
  long start = 0, end = 0;
  start = System.currentTimeMillis();
  System.out.println("start :" + start );
  while(i <100000){
   String a = new String("aaaa");
//   String b = "bbbbb";
   a += "b"; 
   end = System.currentTimeMillis();
   i++;
  }
  System.out.println( "result : " + (end - start)); 
 }
 public static void main(String[] args) {
  DemoString demo = new DemoString();
  int i = 0;
  System.out.println("thoi gian String:" );
  demo.demoString(i);
  System.out.println("thoi gian StringBuilder:" );
  demo.demoStringBuilder(i);
  System.out.println("thoi gian StringBuffer:" );
  demo.demoStringBuffer(i);
 }
}
Kết quả như sau :
III. Cách sử dụng ArrayList và Vector
Mình sẽ giới thiệu trong loạt bài tiếp theo.

No comments:

Post a Comment