Java:从txt文件的单行读取多个不同的字符串变量

时间:2018-01-18 10:13:40

标签: java string file io

我有一个格式如下的文本文件:

[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));
    }

我想我可以尝试名字和姓氏,但有些人有中间名或只是一个名字。我还考虑了使用","逐个角色拍摄每个角色的可能性,并将它们连接起来。作为一种空字符,让程序知道它之前的所有内容都是一个字符串,一个新的字符串即将开始,但在我尝试这样的事情之前,我认为必须有一个更简单的解决方案。

4 个答案:

答案 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)

假设每一行都有特定的常量格式,您可以执行以下操作:

逐行读取文件。对于每一行:

  1. 拆分每行中的字符串。 (使用逗号,
  2. 解析拆分字符串的各个部分
  3. 加入一些收藏
  4. 阅读文件非常简单。 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]; 
(...)
祝你好运