java - Java中解析文本文件的问题

标签 java

我已经查看了所有链接,但似乎无法找到我想要的内容。我有一个需要读入的文本文件。首先是文本文件格式:

3 STL NY Chi //all on one line
STL NY 575 //on its own line
NY Chi 550 //on its own line
STL Chi 225 //on its own line

我需要将 int 读入 int 变量,假设我们称之为 count。然后将同一行上的实际城市放入数组中。接下来的几行需要读入一个数组,将里程与该数组关联起来,例如 [STL NY]=575。我只能使用数组。没有哈希表、列表、堆栈或队列。这是我到目前为止所得到的,老实说,这并不多。我真的需要一些帮助,因为我对这方面的“howto”感到非常困惑。

import java.io.*;
import java.util.*;

public class P3 {

/**
 * @param args the command line arguments
 */
public static int count;

public static void main(String[] args) {

    try {

        FileInputStream dataFile = new FileInputStream("Data.txt");
        //BufferedReader br = new BufferedReader(new InputStreamReader(dataFile));

        String line = br.readLine();

    }

    catch (IOException e) {
        System.err.println ("Unable to open file");
        System.exit(-1);
    }
  }
}
<小时/>

我想我已经到达那里,但我收到错误代码:“不能从静态上下文引用非静态变量城市。”我正在尝试通过打印来测试我的代码。谁能帮我打印这个吗?我想看看数组中有什么,以确保我做得正确。这是我的代码:

package p3;

import java.io.*;
import java.util.*;



class citiesDist {
    String cityOne;
    String cityTwo;
    int miles;
}

class city {
    String cityName;
    int numberLinks;
    citiesDist[] citiesDists;
}

public class P3 {

    city[] cities;

    void initCity(int len) {
        for (int i = 0; i < len; i++) {
            cities[i] = new city();
        }
    }

    void initCitiesDist (int index, int len) {
        for (int i = 0; i < len; i++) {
            cities[index].citiesDists[i] = new citiesDist();
        }
    }

    void parseFile() throws FileNotFoundException, IOException { 
        FileInputStream fstream = new FileInputStream("Data.txt"); 
        DataInputStream in = new DataInputStream(fstream); 
        BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

        int numberCities = Integer.parseInt(br.readLine());
        cities = new city[numberCities];
        initCity(numberCities);

        for (int i = 0; i < numberCities; i++) {
            String line = br.readLine();
            int numberLink = Integer.parseInt(line.split(" ")[1]);
            cities[i].cityName = line.split(" ")[0];
            cities[i].numberLinks = numberLink;
            initCitiesDist (i, numberLink);

            for (int j = 0; j < numberLink; j++){
                line = br.readLine();
                cities[i].citiesDists[j].cityOne = line.split(" ")[0];
                cities[i].citiesDists[j].cityTwo = line.split(" ")[1];
                cities[i].citiesDists[j].miles = Integer.parseInt(line.split(" ")[2]);
            }
        }

    }

    public static void main(String args[]) {
        System.out.println("city" + cities.city);
    }
}

最佳答案

如果您曾经被代码难住,请不要考虑编程语言;只需考虑一下。它只会进一步困惑你的逻辑。 (将算法与语言分开。)当您清楚地了解想要完成什么时,请添加您的语言(例如“我如何完成这个特定任务?”)。

最终目标

根据您的设计,您的目标是获得一个与每个城市之间的距离相关的图表。它看起来像这样:

     [STL][NY] [Chi]
[STL][0]  [575][25]
[NY] [575][0]  [550]
[Chi][25] [550][0]

就文件输入和 Scanner 而言,这并不是太难完成。类。

第一步

您必须提取图表的尺寸(3 x 3)。这是在输入文件的第一行中为您提供的。从包含 FileScanner 获取整数并不太困难,只需确保导入了正确的类,以及正确的错误处理(或者try...catch 或抛出异常)。

Scanner sc = new Scanner(new File("input.txt"));

您需要两个数组 - 一个用于城市,另一个用于距离本身。我们不知道它们有多大(你永远不会假设文件中的数据,你只是假设数据的形式),所以我们必须从文件本身获取它。幸运的是,我们得到了一个整数,后跟城市本身。我们将读取该整数一次并在多个不同位置使用它。

String[] cities = new String[sc.nextInt()];
int[][] distances = new int[cities.length][cities.length];
for(int i = 0; i < cities.length; i++) {
    // Surely there's a method in Scanner that returns String that reads the _next_ token...
}

给读者的练习

您现在已经设置好数据结构并准备就绪。从这里您需要做的是弥合城市数组和距离数组之间的差距。考虑它们到达文件的顺序以及我们遇到它们的顺序。如果有某种方法或方式来回答“STL 和 NY 哪个先出现?”这个问题,您会得到很好的帮助。

尝试一下,看看是否能走得更远。

关于java - Java中解析文本文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050637/

相关文章:

java - 将 java.lang.String 转换为 java.lang.Number

java - 如果我通过 phpMyAdmin 执行查询,它可以工作,但在我的 java 程序中却不能

java - 如何从 jna 或其他库访问 vb.net 原生 dll 文件的类和方法

java - jackson + Tomcat - java.lang.VerifyError : Cannot inherit from final class

java - 如何正确通知此适配器其数据集已更改?

Java代理无法转换我的项目中的所有类

java - 从 Servlet 连接到 Oracle 数据库需要很长时间

java - 使用 ArrayList 和反转文件

java - maven-shade-plugin 和单例

java - Google Guice 自定义范围