如何读取文本文件中行列表的位置

时间:2017-01-24 15:47:24

标签: java arrays file text

我正在建立一个货运管理系统。我想在用户输入源端口和目标端口后列出源和目标之间可用的中间端口。但我不知道该怎么做。我保存了文本文件中每个端口的端口名称和距离,每个端口有一行。位置变量用于计算源和目标之间的距离。我想使用位置变量来定位源和目标之间的端口。

  

Newes; 10;

     

Harrytown; 25;

     

Truy; 33;

     

东港; 47;

     

雅典; 56;

     

Nasky; 71;

private int location, location1, position, position1;
private String source, destination;    

public void choosePort(){
    Scanner sc = new Scanner(System.in);
    int i = 0;
    System.out.println("Please enter the source.");
    source = sc.nextLine();
    System.out.println("Please enter the destination.");
    destination = sc.nextLine();
    try{
        File f = new File("Port.txt");
        Scanner file = new Scanner(f);

        while(file.hasNextLine()){
            String line = file.nextLine();
            String[] split = line.split(";");
            if(split[0].equals(source)){
                location = Integer.parseInt(split[1]);
                position = i;
            }
            else if(split[0].equals(destination)){
                location1 = Integer.parseInt(split[1]);
                position1 = i;
            }
            i++;
        }
        file.close();
    }
    catch(IOException e){
        System.out.println(e);
    }

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您需要在源和目标之间显示端口。例如,如果用户选择“Newes”作为起点并将“Trury”作为目的地,则您希望将“Harrytown”显示为中间人。有几种方法可以做到这一点。最简单的方法,我相信是使用第二个扫描仪逐字扫描,分隔符和while循环内的print语句。

while(file.hasNextLine())
{
 String line = file.nextLine();
 Scanner sff = new Scanner(line);
 sff.useDelimiter(";"); // scanner will see ';' and skip over it
 String temp1 = sff.next;
 if ( source.equals(temp1))
 {
 System.out.println(file.nextLine());
 }

在此之后,只需完成代码即可。写另一个file.nextLine()以查看它是否与目的地匹配,如果不匹配,则打印出该行。当sff与目标匹配时,打印出最后一行,然后插入break语句。

答案 1 :(得分:0)

快点的事情。

    boolean isPrint = false;
    while(file.hasNextLine()){
        String line = file.nextLine();
        String[] split = line.split(";");
        if(split[0].equals(destination)){
           isPrint = false;
        }
        if (isPrint) { System.out.println(split[1]);}
        if(split[0].equals(source)){
             print = true;
        }
    }