我有一个格式如下的文本文件:
[Employee ID], [Full Name], [Rate of Pay]
几个示例行看起来像:
32483, William Ellis, 25.50
58411, Jonathan Ian Morris, 15.00
我试图读取文本文件中的所有员工,并创建每个员工的对象,这些对象将在哈希映射中存储名称,ID和工资。我将EmpID作为字符串,员工称为字符串,工资为双倍。我的问题是它将EmpID作为包含","的字符串读取。然后它会将第一个名称作为名称变量读取,然后尝试将中间名或姓氏作为带有","的双重名称。还附上。因此,例如,它将作为:
empID:" 32483,"
fullName:" William"
工资:埃利斯(产生错误)
while(inputFile.hasNext()) {
empID = inputFile.next();
fullName = inputFile.next();
wage = inputFile.nextDouble();
empmap.put(empID, new Employee(empID, fullName, wage));
}
我想我可以尝试名字和姓氏,但有些人有中间名或只是一个名字。我还考虑了使用","逐个角色拍摄每个角色的可能性,并将它们连接起来。作为一种空字符,让程序知道它之前的所有内容都是一个字符串,一个新的字符串即将开始,但在我尝试这样的事情之前,我认为必须有一个更简单的解决方案。
答案 0 :(得分:0)
我的偏好是使用Files.lines
获取包含文件每一行的流,然后根据分隔符拆分每一行:
public class Main
{
public static void main(final String... args) throws Exception
{
Files.lines(Paths.get("path/to/my/file"))
.forEach(Main::processLine);
}
private static void processLine(final String line)
{
final String[] tokens = line.split(",");
final String id = tokens[0].trim();
final String name = tokens[1].trim();
final String rateOfPay = tokens[2].trim();
//...
}
}
答案 1 :(得分:0)
假设每一行都有特定的常量格式,您可以执行以下操作:
逐行读取文件。对于每一行:
,
)阅读文件非常简单。 This answer可以作为参考。
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
String line = br.readLine();
while (line != null) {
line = br.readLine();
String[] splitStr=line.split(", ");
if(splitStr.length==3){
int empID=Integer.parseInt(splitStr[0]);
String fullName=splitStr[1];
double wage=Double.parseDouble(splitStr[2]);
}
}
} finally {
br.close();
}
答案 2 :(得分:0)
试试这段代码:
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(new File("employee.txt"));
input.useDelimiter(",|\n");
Employee[] emps = new Employee[0];
while(input.hasNext()) {
int id = input.nextInt();
String fullname = input.next();
double payrate = Double.valueOf(input.next().substring(1));
Employee newEmp = new Employee(fullname, payrate, id);
emps = addEmployee(emps, newEmp);
}
for (Employee e : emps) {
System.out.println(e);
}
}
private static Employee[] addEmployee(Employee[] emps, Employee empToAdd) {
Employee[] newEmps = new Product[products.length + 1];
System.arraycopy(products, 0, newProducts, 0, products.length);
newEmps[newEmps.length - 1] = empToAdd;
return newEmps;
}
public static class Employee {
protected int id;
protected String fullname;
protected double payrate;
private static NumberFormat formatter = new DecimalFormat("#0.00");
public Product(String n, double p, int i) {
id = i;
fullname= n;
payrate = p;
}
答案 3 :(得分:0)
您可以使用Split来处理此问题。在您的示例中:
String [] data = inputFile.split(",");
empId = Integer.parseInt(data[0]);
fullname = data [1];
(...)
祝你好运