我无法将文件中的文本读取到数组列表中。
我的文字如下:
438;MIA;JFK;10:55;1092;447
638;JFK;MIA;19:45;1092;447
689;ATL;DFW;12:50;732;448 etc...
我的代码如下所示:
package filesexample;
import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;
/**
*
* @author
*/
public class FilesExample {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
File file = new File ("/Schedule.txt");
try
{
Scanner scanner= new Scanner(file);;
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
Scanner lineScanner= new Scanner(line);
lineScanner.useDelimiter(";");
while(lineScanner.hasNext()){
String part = lineScanner.next();
System.out.print(part + " ");
}
System.out.println();
}
}catch (FileNotFoundException e){
e.printStackTrace();
}
}
}
非常感谢您对入门的一些帮助,谢谢!
答案 0 :(得分:0)
您无需执行以下操作
Scanner lineScanner= new Scanner(line);
lineScanner.useDelimiter(";");
只做
String[] parts = line.split(";");
答案 1 :(得分:0)
使用String.split(delimiter)拆分字符串。
List<String> list = new ArrayList<String>();
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
String[] strArr = line.split(";");
for(String s: strArr){
list.add(s); //adding a string into the list
System.out.println(s + " ");
}
}
System.out.println();
编辑:来自您的评论
我发布的文字,第一个数字是航班号,出发地,目的地,时间,里程和价格。他们都需要 每个类别都有自己的数组,所以航班号需要自己的 数组,自己的数组等。
你不需要每个属性的数组。创建一个类并将其命名为 Filght 。并将您的属性设为实例变量。
class Flight {
private long filghtNo;
private String origin;
private dest;
private Date time;
private long miles;
private double price;
//setters and getters
}
List<Flight> list = new ArrayList<Flight>();
Flight flight = new Flight();
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
Scanner scan = new Scanner(line);
if(scan.hasNextLong()){
flight.setFilgthNo(scan.nextlong());
}
else if // do the same for other properties
}
list.add(flight);
这种方式更像面向对象。
答案 2 :(得分:0)
他们都需要为每个类别都有自己的阵列,所以飞行 number将需要自己的数组,原点是自己的数组
我会说,不要。您不需要为每个数组分别使用单独的数组。
我希望创建一个带有属性的class
: - flight number, origin, destination, time, miles and price
。
现在对于每一行,我只是将它拆分为;
,并在类中有一个构造函数,它将数组作为参数。而不是为每个参数分别设置ArrayList
,我会得到该类实例的ArrayList
。
class Flight {
private int flightNumber;
private String origin;
private String destination;
... so on for `time, miles and price`
public Flight(String[] attr) {
this.flightNumber = Integer.parseInt(attr[0]);
this.origin = attr[1];
this.destination = attr[2];
... so on.
}
}
然后你在哪里使用: -
Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter(";");
我会使用String#split()
获取单个属性,然后创建ArrayList<Flight>
,并向其添加Flight
个实例: -
List<Flight> flights = new ArrayList<Flight>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] attributes = line.split(";");
flights.add(new Flight(attributes));
}
注意: -
您可以改进实例化Flight
类的方式,以及如何设置不同的属性。由于您的属性属于不同的类型,并且它们位于String form
,因此您需要使用conversion
或String to Integer
中相应的String to double
,我在这里没有考虑过。< / p>
答案 3 :(得分:0)
我重新考虑了对更多OO方法的需求,但这就是您所要求的内容。
public final class FlightInfoParser {
private static final String[] EMPTY_STRING_ARRAY = new String[]{};
public static void main(String[] args) throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
List<String> flightNumbersList = new ArrayList<String>();
List<String> originsList = new ArrayList<String>();
List<String> destinationsList = new ArrayList<String>();
List<String> departureTimesList = new ArrayList<String>();
List<Integer> milesList = new ArrayList<Integer>();
List<Double> pricesList = new ArrayList<Double>();
String line;
while ((line = r.readLine()) != null) {
String[] fields = line.split(";");
flightNumbersList.add(fields[0]);
originsList.add(fields[1]);
destinationsList.add(fields[2]);
departureTimesList.add(fields[3]);
milesList.add(Integer.parseInt(fields[4]));
pricesList.add(Double.parseDouble(fields[5]));
}
String[] flightNumbersArray = flightNumbersList.toArray(EMPTY_STRING_ARRAY);
String[] originsArray = originsList.toArray(EMPTY_STRING_ARRAY);
String[] destinationsArray = destinationsList.toArray(EMPTY_STRING_ARRAY);
String[] departureTimesArray = departureTimesList.toArray(EMPTY_STRING_ARRAY);
int[] milesArray = new int[milesList.size()];
for (int i = 0, len = milesArray.length; i < len; ++i) {
milesArray[i] = milesList.get(i);
}
double[] pricesArray = new double[pricesList.size()];
for (int i = 0, len = pricesArray.length; i < len; ++i) {
pricesArray[i] = pricesList.get(i);
}
}
}