Java - 通过char读取文件char并计算行数

时间:2018-05-19 14:34:41

标签: java chars

pygi-convert.sh

上面的代码示例通过命令行从文件,整数读取输入并将它们存储到数组中。如何修改代码,以便从文件中读取字符?我还希望程序计算文件的行数。

例如,对于输入

import java.util.*; 
import java.io.*; 
public class Doomday
{
    public static void main (String args[]) throws FileNotFoundException 
   {
    Scanner scan = new Scanner(new File(args[0])); //provide file name from outside
    int counter =0; //keep track of how many integers in the file
    while(scan.hasNextInt()) 
    {
        counter++;
        scan.nextInt();
    }
    Scanner scan2 = new Scanner(new File(args[0])); 
    int a[] = new int[counter];
    for(int i=0;i<counter;i++)
    {
        a[i]=scan2.nextInt(); //fill the array with the integers
    }
    for(int i=0;i<counter;i++)
    {
        System.out.print(a[i]);
    }

   }

}

我想将它存储到二维数组中。如果我知道如何计算字符数和新行数(因为给定了行数和字符数 - 并且我程序中的每一行都有相同数量的字符 - 我可以找到我有多少行),这将很容易

那么如何更改上面的代码来从文件中读取字符并计算程序的行?

您可以提供一些代码帮助吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

检查此代码。我把它缩短了

要阅读下一行,Java有nextLine()并检查下一行是否有hasNextLine()

import java.util.*; 
import java.io.*; 
public class Dooms
{
    public static void main (String args[]) throws FileNotFoundException 
   {
    Scanner scan = new Scanner(new File(args[0])); //provide file name from outside
    int counter =0; //keep track of how many lines in the file
    while(scan.hasNextLine())
    {
        String line = new String(scan.nextLine());
        System.out.println(line);
        counter++;
    }

    System.out.println("There are "+counter+" lines");
    scan.close();

   }

}

现在,您可以轻松地将文件内容存储在2D数组中,只需稍加修改即可。

答案 1 :(得分:0)

正如@shubham johar所指出的,Java的Scanner类确实有nextLine()方法可以真正简化代码。这里的转换是根据请求的char数组,但是这些数组是逐行添加到ArrayList中的,因为我们无法预先知道将有多少行。也就是说,等同于所请求的2D阵列 如果具体为char数组无关紧要,我建议使用String类。

对于总行数,您始终可以采用ArrayList的大小 这是代码:

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

public class Doomday {
    public static void main (String args[]) throws FileNotFoundException {
        Scanner lineScanner = new Scanner(new File(args[0])); 
        ArrayList<char []> lines = new ArrayList<char []>();

        while(lineScanner.hasNext()) {
            lines.add(lineScanner.nextLine().toCharArray());
        }

        for(char line[] : lines) {
            System.out.println(line);
        }

        System.out.println("Line count: " + lines.size());

        lineScanner.close();
    }


}

修改

代码版本,通过char读取文件char:

public class Doomday {
    public static void main (String args[]) throws FileNotFoundException {
        Scanner scanner = new Scanner(new File(args[0])); 
        scanner.useDelimiter("");
        int numberOfLines = 0;

        while(scanner.hasNext()) {
            char c = scanner.next().charAt(0);

            if(c == System.getProperty("line.separator").charAt(0)) {
                numberOfLines++;
                continue;
            }

            // do something with char
        }

        System.out.println("Number of lines: " + numberOfLines);

        scanner.close();
    }

}