Java:在读取和格式化文本文件时保持前导零

时间:2016-12-11 02:17:07

标签: java arraylist io bufferedreader filereader

我无法确定如何逐行读取文件,然后对其进行格式化。最大的问题是我有一个带有"数字的文本文件"分配给一个" person"。第一个数字是" 001"。当我尝试阅读它时,它只保存为" 1"。对我的数字中的所有前导零都做同样的事情。 " 002"成为" 2"," 030"成为" 30"等等。每个数字都有三位数字,我希望保持这种状态。

以下是我从文件中读取的代码:

do {
    next = Breader.readLine();
    sNumber = Integer.parseInt(next);
    nameArray.add(sNumber);
    sName = Breader.readLine();
    nameArray.add(sName);
    end = Breader.ready();
} while(end);

它必须是Integer.parseInt();函数中的内容。

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class FinalProgram {
    public static void main(String[] args)  IOException {
        nameReader();
    }

    private static void nameReader() throws IOException {
        String nameFile = " ";
        String next = " ";
        int sNumber = 0;
        String sName = " ";
        Scanner input = new Scanner(System.in);
        ArrayList nameArray = new ArrayList();

        try {
            System.out.print("Enter the Name file(c:filename.txt): ");
            nameFile = input.nextLine();
        } catch(IllegalArgumentException e) {
            System.out.printf("Invalid input. Please enter"
                    + " filename in the form of "
                    + "c:filename.txt\n", e.getMessage());
        }

        //Instantiate FileReader and BufferedReader
        FileReader freader = new FileReader(nameFile);
        BufferedReader Breader = new BufferedReader(freader);
        boolean end = Breader.ready();

        do {
            next = Breader.readLine();
            sNumber = Integer.parseInt(next);
            nameArray.add(sNumber);
            sName = Breader.readLine();
            nameArray.add(sName);
            end = Breader.ready();
        } while(end);

        System.out.print(nameArray);
    }
}

2 个答案:

答案 0 :(得分:1)

  

每个数字都有三位数字,我希望保持这种状态。

然后你需要把它读成一个String变量。

或者如果您需要将其转换为int值进行处理,那么当您显示该值时,首先需要使用volatile来格式化输出String。

例如:

NumberFormat

答案 1 :(得分:1)

如果将字符串解析为int sNumber = Integer.parseInt(next);中的整数,则前导零将被忽略,因为整数没有前导零,所以它是多余的。为什么要存储零,你会在一张纸上写030而不是30吗?应该存储多少个零,一个,两个,十个?您如何比较003003030,它们是否相同?

正如您所看到的,您的意思是如何格式化作为字符串,整数永远不会存储为前导零。您可以使用String.format(...);

执行此操作
int yourInteger = 30;
String formattedNumber = String.format("%03d", yourInteger);

// Prints 30 as 030
System.out.println(formattedNumber);

格式字符串"%03d"表示:打印一个整数,打印至少三位数,如果少于三位,则用前导零填充它们。因此,30打印为0305打印为0053000打印为3000,因为数字超过三位。

另一种格式化数字的更高级方法是NumberFormat