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
吗?应该存储多少个零,一、二、十?你如何比较0030
、030
和30
,它们是一样的吗?
如您所见,您的意思是如何格式化 为字符串,整数永远不会以前导零存储。您可以使用 String.format(...);
:
int yourInteger = 30;
String formattedNumber = String.format("%03d", yourInteger);
// Prints 30 as 030
System.out.println(formattedNumber);
格式字符串"%03d"
表示:打印一个整数,至少打印三位数字,如果少于三位数字,则用前导零填充。因此,30
被打印为 030
,5
被打印为 005
,3000
被打印为 3000
,因为有超过三个数字。
另一种更高级的格式化数字的方法是 NumberFormat
。
我无法弄清楚如何逐行读取文件,然后对其进行格式化。最大的问题是我有一个文本文件,其中 "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
吗?应该存储多少个零,一、二、十?你如何比较0030
、030
和30
,它们是一样的吗?
如您所见,您的意思是如何格式化 为字符串,整数永远不会以前导零存储。您可以使用 String.format(...);
:
int yourInteger = 30;
String formattedNumber = String.format("%03d", yourInteger);
// Prints 30 as 030
System.out.println(formattedNumber);
格式字符串"%03d"
表示:打印一个整数,至少打印三位数字,如果少于三位数字,则用前导零填充。因此,30
被打印为 030
,5
被打印为 005
,3000
被打印为 3000
,因为有超过三个数字。
另一种更高级的格式化数字的方法是 NumberFormat
。