【问题标题】:Java: Keeping leading zeros while reading and formatting a text fileJava:在读取和格式化文本文件时保持前导零
【发布时间】:2017-04-26 05:25:32
【问题描述】:

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

【问题讨论】:

    标签: java arraylist io bufferedreader filereader


    【解决方案1】:

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

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

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

    例如:

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

    【讨论】:

    • 帮助很大!谢谢。
    • @JonathanDewein,很高兴它有帮助。不要忘记通过单击复选标记“接受”答案,以便人们知道问题已解决。
    【解决方案2】:

    如果您将字符串解析为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

    【讨论】:

    • 我喜欢这个,但是我怎样才能从文件中读取并让它成为一个整数呢?如果我尝试使用 Integer.parseInt(n);,它会给我一个错误。下一个 = 面包机.readLine(); sNumber = Integer.parseInt(next); nameArray.add(sNumber);
    • 我试过这个:next = Breader.readLine(); sNumber = Integer.parseInt(nf.format(Breader.readLine()));但它给了我错误:java.lang.IllegalArgumentException: Cannot format given Object as a Number
    • 从头开始!我只是没明白你的意思。在将它存储在我的数组列表中之前,我使用了 String.format,它运行良好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 2013-08-03
    • 2016-07-28
    • 2013-08-10
    • 2022-07-15
    • 1970-01-01
    • 2018-09-13
    • 2017-05-17
    相关资源
    最近更新 更多