Find Text

jb_hoangluan

Member
10/10/10
82
0
6
Mình muốn tìm liên tiếp các từ trong 1 văn bản.
Cái này hình như là phải chia ra từng từ.
Mong các bạn giúp đỡ với...
Theo mình lấy vị trí con trỏ, nếu con trỏ tại vị trí cuối văn bản option Search Down báo không tim thấy, ngược lại thì báo tìm thấy.

PHP:
	public void Found(JTextField txtFind) {
		
		String text = txtPane.getText();
		text = text.toUpperCase();
		StringBuffer bf = new StringBuffer(text);	
		int k1 = bf.indexOf(txtFind.getText().toUpperCase());
		
		int  k = txtFind.getText().length();		
		
		for(int i = 0; i = KhoangTrang() && i < k; i++){
			if(k1 != -1){
				txtPane.select(k1, k1 + k);
			}
			else {
				JOptionPane.showConfirmDialog(null, "Không Tìm Thấy : " + txtFind.getText(),
						"Cannot Find", JOptionPane.INFORMATION_MESSAGE);
				return;
			}
		}
			
	}
	private boolean KhoangTrang() {
		//---Lay tung tu trong testfield
		String tmp = new String();
		
		return false;
	}
 

JackV

Administrator
Staff member
Ðề: Find Text

Mình muốn tìm liên tiếp các từ trong 1 văn bản.
Cái này hình như là phải chia ra từng từ.
Mong các bạn giúp đỡ với...
Theo mình lấy vị trí con trỏ, nếu con trỏ tại vị trí cuối văn bản option Search Down báo không tim thấy, ngược lại thì báo tìm thấy.
Mong các bạn giúp đỡ với...
>>> Khổ, giúp gì đây bạn, nêu rõ chứ, đưa code đọc biết có vấn đề gì đâu!
 

jb_hoangluan

Member
10/10/10
82
0
6
Ðề: Find Text

Mình muốn tìm liên tiếp các từ trong 1 văn bản.
Cái này hình như là phải chia ra từng từ.
Mong các bạn giúp đỡ với...
Theo mình lấy vị trí con trỏ, nếu con trỏ tại vị trí cuối văn bản option Search Down báo không tim thấy, ngược lại thì báo tìm thấy.

PHP:
	public void Found(JTextField txtFind) {
		
		String text = txtPane.getText();
		text = text.toUpperCase();
		StringBuffer bf = new StringBuffer(text);	
		int k1 = bf.indexOf(txtFind.getText().toUpperCase());
		
		int  k = txtFind.getText().length();		
		
		for(int i = 0; i = KhoangTrang() && i < k; i++){//----[COLOR="Red"]lỗi ở đây[/COLOR]
			if(k1 != -1){
				txtPane.select(k1, k1 + k);
			}
			else {
				JOptionPane.showConfirmDialog(null, "Không Tìm Thấy : " + txtFind.getText(),
						"Cannot Find", JOptionPane.INFORMATION_MESSAGE);
				return;
			}
		}
			
	}
	private boolean KhoangTrang() {
		//---Lay tung tu trong testfield
		String tmp = new String();
		
		return false;
	}

Ví dụ muốn tìm từ "Mới", nhập vào txtFind(), sau đó get ra đem so sánh với từng từ trong vùng soạn thảo txtPane. Mình dùng indexOf(), nhưng chỉ dừng lại tại 1 từ...
Chú ý hơn là lấy vị trí con trỏ..
 

JackV

Administrator
Staff member
Ðề: Find Text

Chắc chắn là vậy vì indexOf() trả về vị trí đầu tiên nó tìm thấy. Bạn thử nghĩ xem, lần thứ nhất ta sẽ tìm toàn bộ văn bản, lần thứ hai ta sẽ tìm trong phần của văn bản từ sau vị trí tìm thấy thứ nhất, lần thứ ba ta sẽ tìm trong phần của văn bản từ sau vị trí tìm thấy thứ 2, ...
 

jb_hoangluan

Member
10/10/10
82
0
6
Ðề: Find Text

cậu làm mình ... hic hic

cậu bít phương thức lấy vị trí con trỏ chứ?
 

JackV

Administrator
Staff member

jb_hoangluan

Member
10/10/10
82
0
6
Ðề: Find Text

vậy có phải tách từng từ ra ko?
Mình để phương thức kiểm tra Khoangtrang() ổn chứ?
 

JackV

Administrator
Staff member
Ðề: Find Text

Chắc chắn là vậy vì indexOf() trả về vị trí đầu tiên nó tìm thấy. Bạn thử nghĩ xem, lần thứ nhất ta sẽ tìm toàn bộ văn bản, lần thứ hai ta sẽ tìm trong phần của văn bản từ sau vị trí tìm thấy thứ nhất, lần thứ ba ta sẽ tìm trong phần của văn bản từ sau vị trí tìm thấy thứ 2, ...
Là thế này:

ví dụ ta có
112 113 112 114 115 112 113
tìm 113 lần đầu tiên ra index 4, vậy lần tiếp theo tìm 113 trong
112 114 115 112 113
kết quả index lần này là 17 + 8 đoạn đã cắt trước.

Vậy kết luận lần 1 ở index 4, lần 2 ở index 25