簡體   English   中英

Java:在讀取和格式化文本文件時保持前導零

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

我在弄清楚如何逐行讀取文件然后對其進行格式化時遇到麻煩。 最大的問題是我有一個文本文件,其中的“數字”分配給“人”。 第一個數字是“ 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);
    }
}

每個數字都有三位數,我想保持這種方式。

然后,您需要將其讀入String變量。

或者,如果需要將其轉換為int值進行處理,則在顯示該值時,首先需要使用NumberFormat來格式化輸出String。

例如:

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

如果將字符串解析為整數,例如in 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打印為03050053000作為3000中,由於存在三個以上的數字。

通常,格式化數字的另一種更高級的方法是NumberFormat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM