Post

indexOf() trong Java

Trong chuỗi bài hướng dẫn và chia sẻ kiến thức về Java cơ bản, chúng ta đã làm việc qua khá nhiều phương thức hay ho được cung cấp sẵn. Từ cách làm việc với số, với các kiểu dữ liệu và toán tử đến các phương pháp và lộ trình học tốt.

Tuy nhiên, Java cơ bản còn rất nhiều thứ cần để học, chẳng hạn như indexOf – bạn đã biết đến indexOf chưa? Hay là chúng ta lướt qua một vòng về indexOf để biết nó là gì nhé.

1. Phương thức indexOf dùng để làm gì?

Trong các phương thức cơ bản mà Java cung cấp để làm việc với số - với chuỗi thì giới lập trình chúng ta không thể bỏ qua indexOf được. Bởi nó là nhân tố cực kỳ quan trọng làm giảm bớt đi mọi rắc rồi và phức tạm của các phương pháp xử lý chuỗi thủ công mang lại.

Trong Java, phương thức indexOf() được sử dụng để tìm chỉ mục (hay còn được gọi là vị trí) của một ký tự hoặc một chuỗi con cho trước trong một chuỗi cha xác đinh nào đó.

Nghĩa là với một chuỗi string truyền vào thì java.lang.String.indexOf (String str) sẽ trả về một nguyên k nhỏ nhất sao cho this.startsWith (str, k)true.

2. Các cách sử dụng phương thức indexOf trong Java

IndexOf() trong Java đa dạng về cách sử dụng và phạm vụ các trường hợp áp dụng, cụ thể indexOf có hết thảy 4 biến thể.

Bài viết này, mình sẽ mô tả một cách tường tận về chúng.

String indexOf(): Phương thức này trả về chỉ mục - nơi ký tự được chỉ định xuất hiện đầu tiên trong chuỗi cha hoặc nếu ký tự không tồn tại sẽ trả về -1.

Cú pháp:

1
public int indexOf(int character)

Trong đó: character là kí tự mà ta cần biết vị trí.

Ví dụ: Muốn tìm ví trí xuất hiên đầu tiên của kí tự “N” trong câu “Hà Nội 36 Phố phường” ta có thể làm như sau:

1
2
3
4
5
6
7
8
public class IndexOfExample {
	public static void main(String args[]) {
		// Khởi tạo chuỗi mẫu
		String indexString = new String("Hà Nội 36 phố phường");
		// In ra vị trí đầu tiên của N trong chuỗi mẫu
		System.out.println(indexString.indexOf('N')); // 3
	}
}

String indexOf(char ch, int strt ): Phương thức này trả về chỉ mục - nơi ký tự được chỉ định xuất hiện đầu tiên trong chuỗi cha tính từ vị trí cần tìm cho trước hoặc nếu ký tự không tồn tại sẽ trả về -1.

Cú pháp:

1
public int indexOf(int character, int string_start)

Trong đó:

  • character : là kí tự cần tìm chỉ mục
  • string_start : vị trí bắt đầu tìm kiếm trong chuỗi đã cho.

Ví dụ: Với chuỗi “Hà Nội 36 phố phường” ta muốn biết vị trí của kí tự ‘h’ tính từ vị trí thứ 12 thì sao? indexOf(char ch, int strt) trong trường hợp này có phải đã bỏ qua vị trí h-11 không?

1
2
3
4
5
6
7
8
public class IndexOfExample {
	public static void main(String args[]) {
		// Khởi tạo chuỗi mẫu
		String indexString = new String("Hà Nội 36 phố phường");
		// In ra vị trí đầu tiên của 'h' trong chuỗi mẫu tính từ ví trí 12
		System.out.println(indexString.indexOf('h', 12)); // 15
	}
}

String indexOf(String str): Phương thức này trả về chỉ mục - nơi chuỗi con xuất hiện lần đầu tiên trong chuỗi cha. Bắt đầu tìm kiếm từ vị trí 0 - Nếu không tìm thấy chuỗi con kết quả sẽ trả về -1.

Cú pháp:

1
int indexOf(String sub_string)

Trong đó: sub_string là chuỗi con cần tìm chỉ mục.

Ví dụ: Để tìm vị trí của chuỗi con “36” trong câu “Hà Nội 36 phố phường” ta có đoạn code mẫu như sau:

1
2
3
4
5
6
7
8
9
public class IndexOfExample {
	public static void main(String args[]) {
		// Khởi tạo chuỗi mẫu và chuỗi con
		String indexString = new String("Hà Nội 36 Phố phường");
		String sub_string = "36";
		// In ra vị trí đầu tiên của '36' trong chuỗi mẫu
		System.out.println(indexString.indexOf(sub_string)); // 7
	}
}

String indexOf(String str, int strt): Phương thức này trả về chỉ mục - nơi chuỗi con xuất hiện lần đầu tiên trong chuỗi cha tính từ vị trí đã cho trước. Hoặc nếu chuỗi con không tồn tại sẽ trả về -1.

Cú pháp:

1
int indexOf(String str, int string_start)

Trong đó:

  • string: chuỗi con cần tìm vị trí
  • string_start: vị trí để bắt đầu tìm kiếm trong chuỗi cha.

Ví dụ: Tìm chỉ mục của chuỗi con “ph” tính từ ví trí thứ 11 trong chuỗi “Hà Nội 36 phố phường”

1
2
3
4
5
6
7
8
9
public class IndexOfExample {
	public static void main(String args[]) {
		// Khởi tạo chuỗi mẫu và chuỗi con
		String indexString = new String("Hà Nội 36 phố phường");
		String sub_string = "ph";
		// In ra vị trí đầu tiên của 'ph' trong tính từ vị trí 11
		System.out.println(indexString.indexOf(sub_string, 11)); // 14
	}
}

Ngoài ra, bạn có thể sử dụng indexOf ở một mức độ nâng cao hơn. Chẳng hạn như kiểm tra xem một ký tự nào đó có phải nguyên âm hay là không?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class IndexOfExample {

	public static void main(String[] args) {
		boolean isVowel = Vowel('U');
		if (isVowel)
			System.out.println("Là nguyên âm.");
		else
			System.out.println("Không phải nguyên âm.");
	}
	
	public static boolean Vowel(char c) {
		return "AEIOUaeiou".indexOf(c) >= 0;
	}
}

Với bốn biến thể cơ bản, indexOf hầu như có thể giúp bạn xây dựng các tính năng cao hơn, phức tạp hơn cho các hoạt động xử lý liên quan đến chuỗi.

Trong thực tế, để hiểu sâu hơn về cách hoạt động của indexOf, bạn hãy thử thay thế các vị trí cho trước để xem kết quả khác nhau như thế nào, nếu được hãy kết hợp với các phương thức các bạn đã biết để giúp code của mình trở nên ngầu hơn.

Lời kết

Mặc dù đơn giản nhưng hầu hết các dự án lớn trong thực tế đều sử dụng indexOf ở một vai trò cụ thể nào đó. Nhất là đối với các loại dữ liệu về chuỗi thì indexOf chưa bao giờ bị lãng quên bởi các lập trình viên.

Như đã nói bên trên, để phát huy hết vai trò và sức mạnh của mình, indexOf thường hay được sử dụng kết hợp với các phương thức cơ bản khác để cấu thành nên những funtion phức tạp mà các bạn hay nhìn thấy ở những dự án lớn – mấy cái phức tạp vốn là cộng hưởng của những thứ đơn giản mà ra đấy.

Mình tin rằng kiến thức được cung cấp trong bài viết này đủ để các bạn hiểu và sử dụng inde`xOf phục vụ cho nhu cầu code hằng ngày một cách thuần thục rồi. Nếu có khó khăn gì hãy xem đi xem lại các phần ví dụ cụ thể và rõ ràng bên trên bạn nhé.

Bài viết mang tính chất “ghi chú, lưu trữ, chia sẻ và phi lợi nhuận”.
Nếu bạn thấy hữu ích, đừng quên chia sẻ với bạn bè và đồng nghiệp của mình nhé!

Happy coding! 😎 👍🏻 🚀 🔥

This post is licensed under CC BY 4.0 by the author.