2013-01-09 37 views
7

Tôi có ít kinh nghiệm khi sử dụng dấu phân cách và tôi cần đọc tệp văn bản lưu trữ một số đối tượng có dữ liệu được lưu trữ trong các dòng riêng biệt bằng dấu phẩy (","). Các chuỗi riêng biệt sau đó được sử dụng để tạo một đối tượng mới được thêm vào một danh sách mảng.Sử dụng dấu tách khi đọc một tệp

Amadeus,Drama,160 Mins.,1984,14.83 
As Good As It Gets,Drama,139 Mins.,1998,11.3 
Batman,Action,126 Mins.,1989,10.15 
Billy Elliot,Drama,111 Mins.,2001,10.23 
Blade Runner,Science Fiction,117 Mins.,1982,11.98 
Shadowlands,Drama,133 Mins.,1993,9.89 
Shrek,Animation,93 Mins,2001,15.99 
Snatch,Action,103 Mins,2001,20.67 
The Lord of the Rings,Fantasy,178 Mins,2001,25.87 

Tôi đang sử dụng máy quét để đọc các tập tin, tuy nhiên tôi nhận được một không dòng tìm thấy lỗi và toàn bộ tập tin được lưu trữ trong một chuỗi:

Scanner read = new Scanner (new File("datafile.txt")); 
read.useDelimiter(","); 
String title, category, runningTime, year, price; 

while (read.hasNext()) 
{ 
    title = read.nextLine(); 
    category = read.nextLine(); 
    runningTime = read.nextLine(); 
    year = read.nextLine(); 
    price = read.nextLine(); 
    System.out.println(title + " " + category + " " + runningTime + " " + 
         year + " " + price + "\n"); // just for debugging 
} 
read.close(); 
+1

sử dụng 'read.next()' thay vì 'nextLine()'. –

Trả lời

0

Một vấn đề là:

while(read.hasNext()) 
    { 
     title = read.nextLine(); 
     category = read.nextLine(); 
     runningTime = read.nextLine(); 

hasNext() 

Trả về true nếu máy quét này có một mã thông báo khác trong đầu vào của nó. Không phải toàn bộ dòng. Bạn cần sử dụng hasNextLine()

Bạn đang thực hiện nextLine() ba lần. Tôi nghĩ những gì bạn cần làm là đọc dòng và chia dòng.

1

Bạn cũng có thể sử dụng hàm String.split() để chuyển đổi chuỗi thành một chuỗi các chuỗi, sau đó lặp lại từng chuỗi cho các giá trị của bạn.

How to convert comma-separated String to ArrayList? xem phần này để biết thêm chi tiết.

12

Sử dụng read.next() thay vì đọc .nextLine()

title = read.next(); 
    category = read.next(); 
    runningTime = read.next(); 
    year = read.next(); 
    price = read.next(); 
3

Tôi nghĩ bạn muốn gọi .next() trả về một Chuỗi thay vì .nextLine(). Cuộc gọi .nextLine() của bạn đang di chuyển qua đường hiện tại.

Scanner read = new Scanner (new File("datafile.txt")); 
    read.useDelimiter(","); 
    String title, category, runningTime, year, price; 

    while(read.hasNext()) 
    { 
     title = read.next(); 
     category = read.next(); 
     runningTime = read.next(); 
     year = read.next(); 
     price = read.next(); 
    System.out.println(title + " " + category + " " + runningTime + " " + year + " " + price + "\n"); //just for debugging 
    } 
    read.close(); 
Các vấn đề liên quan