使用Scanner读取Java中的字符串

时间:2017-12-14 00:25:03

标签: java arrays string

我正在尝试读取一个名为“CityData.txt”的文件,其中只有一个城市名称列表,每行一个。我过去一直在使用扫描程序从文件中读取字符串,并使用它从同一程序中的另一个文件读取整数,但它似乎没有从文件中读取任何内容。

int counter2 = 0;
File strFile = new File("CityData.txt");
Scanner strScanner = new Scanner(strFile);
Scanner strCountScanner = new Scanner(strFile);

while ((strScanner.hasNext() == true)) {
    System.out.println(strScanner.nextLine());
    counter2++;
}

System.out.println("This is counter2: " + counter2);
String[] array2 = new String[counter2];

while ((strCountScanner.hasNext() == true)) {
    for (int i = 0; i < counter2; i++) {
        array2[i] = strCountScanner.nextLine();
    }
}

理想情况下,counter2会告诉我文件中有多少个城市,然后我会用它们填充array2。但是,程序运行后,counter2保持为0。我已经习惯了一段时间,我希望也许我只是错过了一些愚蠢的东西。

由于

3 个答案:

答案 0 :(得分:1)

您是否尝试将城市添加到数组中?

public static void readText throws FileNotFoundException {
    ArrayList lines = new ArrayList();          
    Scanner scan = new Scanner(new File("CityData.txt"));
    while(scan.hasNextLine()){
        String line = scan.nextLine();
        lines.add(line);
    }
}

或8中的流

 Stream <String> lines = Files.lines(Paths.get("c:\\demo.txt"));
            lines.forEach(System.out::println);
            lines.close();

答案 1 :(得分:1)

由于您正在阅读字符串,因此使用hasNextLine()会更合适。您可以尝试下面的代码,它应该按预期工作。 HTH。

int counter2 = 0;
File strFile = new File("CityData.txt");
Scanner strScanner = new Scanner(strFile);
Scanner strCountScanner = new Scanner(strFile);

while((strScanner.hasNextLine() == true)) {
    System.out.println(strScanner.nextLine());
    counter2++;
}

System.out.println("This is counter2: " + counter2);
String[] array2 = new String[counter2];

while((strCountScanner.hasNextLine() == true)) {
    for (int i = 0; i < counter2; i++) {
        array2[i] = strCountScanner.nextLine();
    }
}

答案 2 :(得分:1)

理想情况下,我会避免两个循环,只是为此目的使用ArrayList。这可以为您提供数量以及使阵列更具动态性的灵活性。另外,我会将Scanner放入try资源块中,因为它会关闭资源本身。以下是供参考的代码。

    File strFile = new File("CityData.txt");
    try (Scanner strScanner = new Scanner(strFile)) {

        ArrayList<String> arrayList = new ArrayList<>();

        while (strScanner.hasNext()) {
            arrayList.add(strScanner.nextLine());
        }

        System.out.println("number of cities is " + arrayList.size());
        System.out.println("cities are " + arrayList);
    }catch (Exception e){
        e.printStackTrace();
    }