Làm cách nào để tạo string.indexof() dừng ở cuối string.length() trong vòng lặp for trong java

lập trình


Xin chào mọi người, tôi đang sử dụng String.indexOf() để tìm tất cả các lần xuất hiện của một ký tự trong chuỗi bằng vòng lặp for. Vấn đề là, tôi đã dạy rằng nếu tôi lặp lại chuỗi trong vòng lặp for cho đến hết độ dài của chuỗi thì phép lặp sẽ kết thúc và chỉ in các lần xuất hiện của ký tự đã tìm thấy nhưng vòng lặp for vẫn in -1, nghĩa là nó không dừng lại sau khi tìm thấy lần xuất hiện cuối cùng của nhân vật.

Những gì tôi đã thử:

public static void main(String[] args) {

     String str1 = "hello from lagos";
	   String guess = "l";
	   int index = str1.indexOf(guess);
	   System.out.println("index is : " + index); // to show where the first occurrence is 
	   for(int i = 0; i < str1.length(); i++) {
		   System.out.println("For many ocuurrences: " + index);
		   index = str1.indexOf(guess, index + 1);
		      
	   }
	}

Đầu ra:

index is : 2
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1

Câu hỏi của tôi là: tại sao vòng lặp không dừng sau khi in 2, 3 và 11 đầu tiên. Tại sao nó lại in -1 và tại sao vòng lặp không dừng sau khi in 11 đầu tiên? Cảm ơn vì bất kì sự giúp đỡ.

Giải pháp 1

Đây là lúc việc chạy mã trong trình gỡ lỗi và duyệt từng dòng mã cũng như kiểm tra các biến sẽ giúp bạn giải quyết vấn đề này nhanh hơn mức bạn có thể nhập câu hỏi vào CodeProject.

Vấn đề không phải là về indexOf. Vấn đề là việc quản lý vòng lặp của bạn.

Bạn không nên sử dụng một for vòng lặp cho việc này. MỘT while vòng lặp sẽ phù hợp hơn và bạn chỉ cần một biến để theo dõi vị trí xảy ra chứ không phải hai biến.

コメント

タイトルとURLをコピーしました