2012-12-21 32 views
9

Tôi xếp hạng nghiệp dư khi nói đến Java, vì vậy hãy tha thứ cho câu hỏi của tôi nếu có vẻ như câm :-P Tôi có đoạn mã sau được thiết kế để đếm số dòng một tập tin:Đặt lại máy quét .nextLine()

while (scanNumOfLines.hasNextLine())  
    { 
    NumOfLines ++; 
    scanNumOfLines.nextLine(); 
    } 
    System.out.println("NumOfLines = "+NumOfLines); 

vì vậy, nó đếm tốt, nhưng tôi muốn tái sử dụng các máy quét cho mục đích khác, nhưng nextLine đã chuyển đến dòng cuối cùng của tập tin, và tôi muốn đặt lại nó trở lại dòng đầu tiên.

(Thay vào đó, tôi đã phải sử dụng máy quét khác với mục đích khác, và đối với tôi điều này dường như ít thanh lịch hơn nó nên được.)

Tôi chắc chắn phải có một phương pháp quét mà reset bộ đếm đến số không?

Cảm ơn

CJ

+0

Bộ đếm nào? Bộ đếm này nằm trong mã của bạn, không nằm trong 'Máy quét'. – EJP

Trả lời

4

Bạn sẽ phải redeclare các Scanner. Khi bạn gọi nextLine(), dòng bị xóa khỏi bộ đệm và bị loại bỏ một cách hiệu quả khỏi Scanner.

Vì vậy, về cơ bản, có một phương pháp để làm điều đó: đó là hàm tạo.

Scanner scanNumOfLines = new Scanner(myFile); 

Không có "bộ đếm" trong đối tượng Scanner. Thay vào đó, hãy nghĩ nó giống như một băng chuyền. Các vành đai không có kiến ​​thức hoặc quan tâm về những gì trên đó. Nó chỉ giữ những thứ nhổ ra ở bạn trong khi có những vật còn lại trên đó. Và một khi bạn lấy chúng, chúng sẽ biến mất khỏi nó.

-1

Bạn có thể sử dụng RandomAccessFile và sử dụng phương thức seek() để quay lại dòng đầu tiên.

+0

Nhưng không phải với 'Máy quét'. – EJP

8

Điều này là không thể.

Lý do để không bao gồm nó, là phạm vi loại đầu vào mà nó hỗ trợ. Một ví dụ là các luồng. Chúng không lưu trữ các kết quả sau khi chúng được truyền đi, vì vậy chúng không hỗ trợ việc đặt lại.

Vì vậy, cách thanh lịch là tạo Scanner mới. Nếu bạn cung cấp cho nó nhiều cài đặt tùy chỉnh, hãy tạo phương thức nhà máy.

0
File file = new File("StoreData.txt"); 

Scanner reader = new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
     k++; 
     reader.nextLine(); 
} 
reader.close(); 
reader=null;  
//reset scanner   
reader=new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
    System.out.println(reader.nextLine());    
} 
+2

Chỉ có mã? lời giải thích của bạn ở đâu? –

1

Tôi nhận ra điều này đã được trả lời nhưng nếu tôi nhìn lên những thứ này tôi chắc chắn rằng người khác quá, vì vậy tôi nghĩ rằng tôi muốn đóng góp theo cách tôi đã đi về cách giải quyết vấn đề này: Như vấn đề của tôi yêu cầu tôi đọc một tập tin một số lần dựa trên đầu vào của người dùng, lớp thử nghiệm của tôi có một ArrayList của các máy quét đọc tệp, sau đó xóa chính nó một khi nó không còn cần thiết nữa. Cách tôi thiết lập nó không bao giờ có hơn 1 máy quét trong ArrayList, nhưng ArrayList rất hữu ích trong việc thêm và loại bỏ các đối tượng.

Các vấn đề liên quan