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

Java: Keeping leading zeros while reading and formatting a text file

我无法弄清楚如何逐行读取文件,然后对其进行格式化。最大的问题是我有一个文本文件,其中 "number" 分配给了 "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);
    }
}

Each number has three digits and I want to keep it that way.

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

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

例如:

NumberFormat nf = NumberFormat.getIntegerInstance();
nf.setMinimumIntegerDigits(3);
int value = 1;
System.out.println( nf.format(value) );

如果像 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