0

我已经用谷歌搜索了几天,但运气不佳。我正在尝试读取一个文本文件并使用该信息来填充类对象的数组的私有字段。我是 Java 新手,对一般编程也很陌生。

我想出的读入数组的方法似乎很笨拙,我觉得必须有更好的方法,但是我找不到这种特殊情况的好例子。

创建一堆字符串变量是我可以让它工作的唯一方法。也许 main 是一个不好的地方。也许扫描仪在这里是一个糟糕的选择?

有什么更好的方法来实现这种情况?

我的文本文件包含由空格分隔的字符串和整数,类似于:

乔 2541 555-1212 345 1542 类型

Bob 8543 555-4488 554 1982 类型...等

到目前为止,我的大部分代码都在 main 中:

   Scanner in = new Scanner(new FileReader("accounts.txt")); //filename to import
   Accounts [] account = new Accounts [10];
   int i = 0; 
   while(in.hasNext())
   {          
    account[i] = new Accounts();
    String name = in.next();
    String acct_num = in.next();
    String ph_num = in.next();
    String ss_num = in.next();
    int open_bal = in.nextInt();
    String type = in.next();

    account[i].setName(name);
    account[i].setAcctNum(acct_num);
    account[i].setPhoneNum(ph_num);
    account[i].setSSNum(ss_num);
    account[i].setOpenBal(open_bal);
    account[i].setType(type);
    i++;
   }

class Accounts
{
  public Accounts()
  { 
  }

  public Accounts(String n, String a_num, String ph_num, 
  String s_num, int open_bal, String a_type, double close_bal)
  {
  name = n;
  account_number = a_num;
  phone_number = ph_num;
  ssn = s_num;
  open_balance = open_bal;
  type = a_type;
  close_balance = close_bal;
  }
  public String getName()
  {
    return name;
  } 
  public void setName(String field)
  {
    name = field;
  }
  public String getAcctNum()
  {
    return account_number;
  }
  public void setAcctNum(String field)
  {
    account_number = field;
  }
  //And so forth for the rest of the mutators and accessors

  //Private fields             
  private String name;
  private String account_number;
  private String phone_number;
  private String ssn;
  private int open_balance;
  private String type;
  private double close_balance;
} 
4

2 回答 2

0

我相信您需要拆分每一行才能获取每行中包含的数据。您可以使用将返回字符串 [] 的字符串类的 split()。然后您可以遍历字符串数组的每个索引并将它们传递给帐户类的 mutator 方法。

可能是这样的。

while(in.hasNext())
{
    // will take each line in the file and split at the spaces.
    String line = in.next();
    String[] temp = line.split(" ");

    account[i].setName(temp[0]);
    account[i].setAcctNum(temp[1]);
    account[i].setPhoneNum(temp[2] + "-" + temp[3]);
    account[i].setSSNum(temp[4]);
    account[i].setOpenBal((int)temp[5]);
    account[i].setType(temp[6]);

    // will account for blank line between accounts.
    in.next();
    i++;
 }

电话号码被分成两个独立的索引,因此您必须重新加入电话号码,方法是前 3 位数字在一个索引中,后 4 位在下一个索引中。

于 2014-02-16T21:31:54.257 回答
0
于 2014-02-16T22:17:04.770 回答