当前位置: 首页 > 知识库问答 >
问题:

解析文本文件中的输入

曹和正
2023-03-14

我有一个包含员工信息的文本文件。第一个单词是员工的姓氏,第二个单词是第一个名字。字符代码h或s告诉我他们是什么样的员工,有薪或小时。最后,字符代码后面的数字是小时工资(如果为小时工)或年薪(如果为受薪员工)。

Smith, John   h   5.00
Potter, Harry   s   10000

我想对这些信息做的是扫描文本文件,根据识别的字符代码自动创建新的受薪员工对象或小时员工对象。

这些是小时雇员对象的参数。

public HourlyEmployee(String first, String last, double wage)

这就是我想到的。

File input = new File("EmployeesIn.txt"); 
Scanner in = new Scanner(input);


while(in.hasNextLine()) {
    int i = 1;
    String line =(in.nextLine());
    if (line.contains(" h ")) {
        HourlyEmployee Employee1 = new HourlyEmployee(in.next(),in.next(),in.nextDouble());
        System.out.println(Employee1);  

这段代码的问题是,我从in.nextDouble()中得到一个InputMismatchException.

所以我编辑了我的代码,手动将工资分配为1,至少看看它是否正确分配了姓氏和名字,但它甚至没有正确分配。它使用错误的行来分配值,并将名字分配为姓氏,将姓氏分配为名字。

Harry, Potter,  $1.0/hour

所以我的问题是,我如何正确地做到这一点?根据我提供的文本文件,我想用这些参数创建一个HourlyEmployee对象

HourlyEmployee Employee1 = new HourlyEmployee(Smith,John,5.00);

共有2个答案

司寇经亘
2023-03-14

为什么只是加载文件并逐行读取?

由于您的文件结构相同,因此很容易解析/拆分每一行

public static String loadFile(String filePath){



    try {           

        // Open the file that is the first command line parameter
        FileInputStream fstream = new FileInputStream(filePath);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

        String strLine = null;

        //Read File Line By Line
        while ((strLine = br.readLine()) != null  )   {

                            if(strLine.split("[ ]+").length > 3){
                               // do stuff here
                             }

        }// end while

        //Close the input stream            
        br.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return buff.toString();
}
傅振濂
2023-03-14

两个明显的问题:

由于你是按顺序读文件的,所以你读入的第一个东西是姓氏;但是您的< code>HourlyEmployee需要的第一个参数是名字。其次,您第三次尝试读取文件时,将会读取“h”或“s”标志,而不是pay。解决方案:分别读入名字,然后调用函数。大概是这样的:

while(in.hasNextLine()) {
  lastName = in.next();
  firstName = in.next();
  payType = in.next(); // read the 'h' or 's'
  pay = in.nextDouble();
  switch(payType) {
    case 'h': 
      Employee1 = new HourlyEmployee(firstName, lastName, pay);
      break;
    case 's':
      Employee1 = new SalariedEmployee(firstName, lastName, pay);
      break;
    default:
      // warn about invalid format
  }
  System.out.println(Employee1);  
}

您可能需要删除<code>lastName</code>变量中的逗号-不确定您的函数是否已经处理了该问题。

 类似资料:
  • 问题内容: 我是Python的新手,我搜索如何解析.txt文件。我的.txt文件是一个包含计算信息的名称列表,例如: myfile.txt var0 = 16 var1 = 1.12434E10 var2 = -1.923E-3 var3 = 920 如何读取值并将其放入python中? 问题答案: 我建议将值存储在字典中,而不是存储在单独的局部变量中: 现在以身份访问它们。如果名称都是有效的py

  • 所以我在这方面做了一点工作,遇到了麻烦。当它开始处理时,它总是给我一个致命的错误<基本上,我想从互联网上读取一个文本文件,然后对其进行解析,这样我就可以开始分解它,并使用JSON解析器处理JSON数据。但是再往下一点(我已经完成了部分)。我只是在连接和下载数据方面遇到了问题。我只想读入文本文件,然后再次打印出来。谢谢你在这方面的帮助。 这就是它给我的 01-26 15:11:48.373 1958

  • 问题内容: 我有一个包含以下行的文本文件: 每个“ |” 符号表示它有一列。我必须从“ |”内部的每一行中提取信息 迹象。当我尝试以下代码时: 它给了我: 如何正确解析? 问题答案: 试试这个:

  • 我正在使用snmp4j开发snmp管理器。我需要读取MIB文本文件并生成相应的XML文件。是否有任何SNMP4j库可用于解析Mib文本文件并获取每个对象的数据。如果snmp4j不能解决我的问题,是否有其他类似的开源可用? 谢谢

  • 我有这个文件要处理,我正试图找出如何将第二行作为不同的对象来读取。在这一行的末尾,最后一项是公交车的数量。第二行、第四行等应包含idBus和noOfBus,并用逗号分隔。 基于这些课程 我想要一个函数来处理CSV文件中所有公交车和大学线路的列表。它必须使用流API。我不知道这是否可能或如何进行。 当然,可以根据类进行更改,但保留变量,不添加任何额外内容。 我认为最方便的方法是浏览文件,根据两个班级

  • 我无法理解为什么当我通过的文本符合格式时,我会得到DateTimeParseException错误。下面是导致该问题的代码: 奇怪的是。每当我查询用户一段时间(让我们以00:02:30为例),它就会完全按照我想要的方式运行。但是当我使用我的方法(从文本文件中提取时间)时,它会出现错误: 线程“main”java.time.format.DateTimeParseException中出现异常:无法分