使用java中的scanner类从文件中获取输入

时间:2016-04-19 12:31:04

标签: java java.util.scanner

我正在尝试使用java中的两个坐标(x,y)存储类中的城市列表

我的课程如下:

public class City {
    int x;
    int y;

    // Constructs a city at chosen x, y location
    public City(int x, int y){
        this.x = x;
        this.y = y;
    }
}

我已经创建了另一个课程来存储ArrayList中的城市:

public class TourManager {

    // Holds our cities
    private static ArrayList destinationCities = new ArrayList<City>();

    // Adds a destination city
    public static void addCity(City city) {
        destinationCities.add(city);
    }
}

我的主要课程如下:

public class Final {
    public static void main(String[] args) {
        // Create and add our cities
        City city = new City(60, 200);
        TourManager.addCity(city);
        City city2 = new City(180, 200);
        TourManager.addCity(city2);
        City city3 = new City(80, 180);
        TourManager.addCity(city3);
    }
}

在这里,我在主要功能内的ArrayList中存储了三个城市。但现在我想以下列格式从文件中获取输入。我只是想让坐标忽略所有其他界限。

  

NAME:sample.tsp

     

TYPE:TSP

     

评论:尤利西斯的奥德赛(Groetschel / Padberg)

     

维度:3

     

EDGE_WEIGHT_TYPE:GEO

     

NODE_COORD_SECTION

     

1 60 200

     

2 180 200

     

3 80 180

我想使用scanner类来获取输入但是在使用它时感到困惑。我已经制作了一个部分代码片段来获取输入,但它不起作用:

Scanner in = new Scanner(new File("sample.tsp"));
String line = "";
int n;
in.nextLine();
in.nextLine();
in.nextLine();
line = in.nextLine();
line = line.substring(11).trim();
n = Integer.parseInt(line);
in.nextLine();
in.nextLine();

但是,如何使用City类对象获取坐标,就像我之前从此文件中所做的那样?

2 个答案:

答案 0 :(得分:1)

你需要跳过你不需要的前几行。

然后拆分线以获得各种数字。索引0包含序列号,1和2包含坐标。然后将它们解析为int。例如:

in.nextLine();// multiple times.
//...
String cs = in.nextLine(); // get the line
City city = new City(Integer.parseInt(cs.split(" ")[1]), Integer.parseInt(cs.split(" ")[2]));
TourManager.addCity(city);

String cs2 = in.nextLine();
City city2 = new City(Integer.parseInt(cs2.split(" ")[1]), Integer.parseInt(cs2.split(" ")[2]));
TourManager.addCity(city2);

String cs3 = in.nextLine();
City city3 = new City(Integer.parseInt(cs3.split(" ")[1]), Integer.parseInt(cs3.split(" ")[2]));
TourManager.addCity(city3);

答案 1 :(得分:0)

每当您使用in.nextLine()时,实际上它都会使用您输入的字符串。所以尝试将它分配给一些字符串变量。例如:

String s =in.nextLine();

此外,不需要使用你在第2,第3,第4和第9行所做的in.nextLine();