在Java控制台中显示定界数据

时间:2018-12-06 12:53:53

标签: java string.format

因此,我尝试使用String.format将文件读取器读取的CSV数据(定界)显示在控制台上,以保持显示整洁。 这是示例数据

颜色,数字, 字母
红色 ,1002,X
蓝色,1769年,Y
贪婪,1769年,Z

我使用的代码如下

try {

                fr = new FileReader(filepath);
                Scanner scan = new Scanner(fr);
                scan.useDelimiter(",");
                while(scan.hasNext()) {
                    String t = scan.next();
                    t = String.format("%10s", t);
                    System.out.print(t);

我观察到的是,由于定界符,前一行的最后一个字符串和当前行的第一个字符串(在示例数据中用粗体和斜体表示)合并为一个字符串。 每行都会发生这种情况,并使显示混乱。我正在努力寻找仅使用 string.format 方法的方法。这是我必须接受的限制吗?

2 个答案:

答案 0 :(得分:0)

您还尝试使用“ \ n”吗?可能是scan.useDelimiter(“,\ n”);

答案 1 :(得分:0)

我不认为Scanner是如何从csv文件读取数据的。相反,请使用最新的方式,即java.nio

我假设您的filepathString,那么您可以使用此行代码将每一行分别读入List<String>(您可能需要调整StandardCharsets值):

List<String> allLines = Files.readAllLines(Paths.get(filepath), StandardCharsets.ISO_8859_1);

如果您只想使用System.out显示数据,可以这样做,

  

对于小文件(将所有文件内容加载到RAM中)将很好地工作

public static void main(String[] args) {
    // THIS HAS TO BE ADJUSTED TO YOUR PATH, OF COURSE
    String filePathString = "P:\\ath\\to\\your\\file.csv";

    Path filePath = Paths.get(filePathString);

    List<String> csvLines = new ArrayList<>();

    try {
        // This reads all the lines of the file into the List<String>
        csvLines = Files.readAllLines(filePath, StandardCharsets.ISO_8859_1);
    } catch (IOException e) {
        System.err.println("IOException while reading the csv file!");
        e.printStackTrace();
    }

    if (csvLines.size() > 0) {
        System.out.println(csvLines.size() + " lines read, here they are:\n");

        csvLines.forEach(csvLine -> {
            System.out.println(csvLine);
        });

    } else {
        System.err.println("No lines read...");
    }
}
  

对于大文件,您应该使用Stream(不会将所有内容加载到RAM中)

public static void main(String[] args) {
    // THIS HAS TO BE ADJUSTED TO YOUR PATH, OF COURSE
    String filePathString = "P:\\ath\\to\\your\\file.csv";

    Path filePath = Paths.get(filePathString);

    List<String> csvLines = new ArrayList<>();

    try {
        // This is the only difference: streaming the file content line by line
        Files.lines(filePath, StandardCharsets.ISO_8859_1).forEach(line -> {
            csvLines.add(line);
        });
    } catch (IOException e) {
        System.err.println("IOException while reading the csv file!");
        e.printStackTrace();
    }

    if (csvLines.size() > 0) {
        System.out.println(csvLines.size() + " lines read, here they are:\n");

        csvLines.forEach(csvLine -> {
            System.out.println(csvLine);
        });

    } else {
        System.err.println("No lines read...");
    }

}
  

您根本不需要使用String.format(...)