Đoạn trích bài giảng với người cố vấn trong khóa học của Đại học Codegym. Đăng ký cho khóa học đầy đủ.


1 So sánh các chuỗi

Một trong những thao tác phổ biến nhất với chuỗi là so sánh. Lớp String có hơn mười phương thức khác nhau được sử dụng để so sánh một chuỗi với một chuỗi khác. Dưới đây chúng ta sẽ xem xét 8 trong số những cái chính.

phương pháp Sự miêu tả
boolean equals(String str)
Các chuỗi được coi là bằng nhau nếu tất cả các ký tự của chúng khớp nhau.
boolean equalsIgnoreCase(String str)
So sánh các chuỗi, bỏ qua trường hợp của các chữ cái (bỏ qua chúng là chữ hoa hay chữ thường)
int compareTo(String str)
So sánh các chuỗi, trả về số ký tự khớp từ đầu chuỗi.
public int compareToIgnoreCase(String str)
Trả về số lượng ký tự phù hợp từ đầu chuỗi, bỏ qua trường hợp
boolean regionMatches(int toffset, String str, int offset, int len)
So sánh các phần của chuỗi
boolean startsWith(String prefix)
Kiểm tra xem chuỗi hiện tại có bắt đầu bằng chuỗi khôngprefix
boolean endsWith(String suffix)
Kiểm tra xem chuỗi hiện tại có kết thúc bằng chuỗi khôngsuffix

Giả sử bạn muốn viết một chương trình yêu cầu người dùng cung cấp đường dẫn đến một tệp và sau đó kiểm tra loại tệp dựa trên phần mở rộng của nó. Mã của một chương trình như vậy có thể trông giống như thế này:

Mã số ghi chú
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Tạo một Scannerđối tượng
Đọc một dòng từ bàn điều khiển

Kiểm tra xem chuỗi pathcó kết thúc bằng chuỗi đã cho hay không


2 Tìm kiếm chuỗi con

Sau khi so sánh các chuỗi, thao tác phổ biến thứ hai là tìm một chuỗi bên trong một chuỗi khác. Lớp String cũng có một vài phương thức cho việc này:

phương pháp Sự miêu tả
int indexOf(String str)
Tìm kiếm chuỗi strtrong chuỗi hiện tại. Trả về chỉ số của ký tự đầu tiên của lần xuất hiện đầu tiên.
int indexOf(String str, int index)
Tìm kiếm chuỗi strtrong chuỗi hiện tại, bỏ qua indexcác ký tự đầu tiên. Trả về chỉ mục của sự xuất hiện.
int lastIndexOf(String str)
Tìm kiếm chuỗi strtrong chuỗi hiện tại, bắt đầu từ cuối. Trả về chỉ mục của lần xuất hiện đầu tiên.
int lastIndexOf(String str, int index)
Tìm kiếm chuỗi strtrong chuỗi hiện tại từ cuối, bỏ qua indexcác ký tự đầu tiên.
boolean matches(String regex)
Kiểm tra xem chuỗi hiện tại có khớp với mẫu được chỉ định bởi biểu thức chính quy hay không.

Các phương pháp indexOf(String)indexOf(String, index)thường được sử dụng kết hợp. Phương thức đầu tiên cho phép bạn tìm sự xuất hiện đầu tiên của chuỗi con đã truyền trong chuỗi hiện tại. Và phương pháp thứ hai cho phép bạn tìm các lần xuất hiện thứ hai, thứ ba, v.v. bằng cách bỏ qua các ký tự chỉ mục đầu tiên.

Giả sử chúng tôi có một url như " https://domain.com/about/reviews " và chúng tôi muốn thay thế tên miền bằng " codegym.cc ". Các url có thể có tất cả các loại tên miền khác nhau, nhưng chúng tôi biết những điều sau:

  • Tên miền được bắt đầu bằng hai dấu gạch chéo lên — "//"
  • Theo sau tên miền là một dấu gạch chéo đơn — " /"

Đây là mã cho một chương trình như vậy sẽ như thế nào:

Mã số ghi chú
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Tạo một đối tượng Scanner
Đọc một dòng từ bàn điều khiển

Lấy chỉ mục của lần xuất hiện đầu tiên của chuỗi " //"
Chúng tôi nhận được chỉ mục của lần xuất hiện đầu tiên của chuỗi /, nhưng chỉ xem sau lần xuất hiện của các ký tự //.
Ta lấy xâu từ đầu đến cuối kí tự //
Ta lấy xâu từ /đầu đến cuối.

Chúng tôi nối các chuỗi và miền mới.

Các phương thức lastIndexOf(String)lastIndexOf(String, index)hoạt động theo cùng một cách, chỉ có điều tìm kiếm được thực hiện từ cuối chuỗi về đầu chuỗi.



3 Tạo chuỗi con

Đoạn trích bài giảng với người cố vấn trong khóa học của Đại học Codegym. Đăng ký cho khóa học đầy đủ.


Ngoài việc so sánh các chuỗi và tìm chuỗi con, còn có một hành động rất phổ biến khác: lấy chuỗi con từ một chuỗi. Khi nó xảy ra, ví dụ trước cho bạn thấy một substring()lệnh gọi phương thức trả về một phần của chuỗi.

Dưới đây là danh sách 8 phương thức trả về chuỗi con từ chuỗi hiện tại:

phương pháp Sự miêu tả
String substring(int beginIndex, int endIndex)
Trả về chuỗi con được chỉ định bởi phạm vi chỉ mục beginIndex..endIndex.
String repeat(int count)
Lặp lại chuỗi hiện tại n lần
String replace(char oldChar, char newChar)
Trả về một chuỗi mới: thay thế ký tự oldCharbằng ký tựnewChar
String replaceFirst(String regex, String replacement)
Thay thế chuỗi con đầu tiên, được chỉ định bởi một biểu thức chính quy, trong chuỗi hiện tại.
public String replaceAll(String regex, String replacement)
Thay thế tất cả các chuỗi con trong chuỗi hiện tại khớp với biểu thức chính quy.
String toLowerCase()
Chuyển đổi chuỗi thành chữ thường
String toUpperCase()
Chuyển đổi chuỗi thành chữ hoa
String trim()
Loại bỏ tất cả khoảng trắng ở đầu và cuối chuỗi

Dưới đây là tóm tắt các phương pháp có sẵn:

substring(int beginIndex, int endIndex)phương pháp

Phương substringthức trả về một chuỗi mới bao gồm các ký tự trong chuỗi hiện tại, bắt đầu từ ký tự có chỉ số beginIndexvà kết thúc tại endIndex. Như với tất cả các khoảng trong Java, ký tự có chỉ mục endIndexkhông được bao gồm trong khoảng. Ví dụ:

Mã số Kết quả
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Nếu endIndextham số không được chỉ định (có thể), thì chuỗi con được lấy từ ký tự ở đầu Index đến cuối chuỗi.

repeat(int n)phương pháp

Phương thức lặp lại chỉ đơn giản là lặp lại chuỗi hiện tại n. Ví dụ:

Mã số Kết quả
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)phương pháp

Phương replace()thức trả về một chuỗi mới trong đó tất cả các ký tự oldCharđược thay thế bằng ký tự newChar. Điều này không làm thay đổi độ dài của chuỗi. Ví dụ:

Mã số Kết quả
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()replaceAll()phương pháp

Phương thức này replaceAll()thay thế tất cả các lần xuất hiện của một chuỗi con bằng một chuỗi con khác. Phương thức này replaceFirst()thay thế lần xuất hiện đầu tiên của chuỗi con đã truyền bằng chuỗi con đã chỉ định. Chuỗi cần thay thế được chỉ định bởi một biểu thức chính quy. Chúng ta sẽ đi sâu vào các biểu thức chính quy trong nhiệm vụ Đa luồng Java .

Ví dụ:

Mã số Kết quả
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()phương pháp

Chúng ta đã biết những phương thức này khi lần đầu tiên học cách gọi các phương thức của lớp String.

trim()phương pháp

Phương thức này trim()loại bỏ các khoảng trắng ở đầu và cuối khỏi một chuỗi. Không chạm vào khoảng trắng bên trong một chuỗi (nghĩa là không ở đầu hoặc cuối). Ví dụ:

Mã số Kết quả
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"