将字符串分配给从文件中提取的ArrayList

时间:2011-02-20 00:24:20

标签: java arraylist nullpointerexception

我从文件中导入了Strings的列表,并将其放入arrayList。我试图删除这些数组的结尾,因此我将它们放入单独的String格式

这是我设置x

的地方
x = new ArrayList<BankAccounts>();
try {
    Scanner reader;
    reader = new Scanner( new File("F:\\myCreditUnion.txt") );

    while ( reader.hasNext() )
    {
        String inputLine = reader.nextLine();
        first = inputLine.substring(0, 3);
        second = Double.parseDouble(inputLine.substring(5, inputLine.length()));
        x.add(new BankAccounts(first, second));
    }

    reader.close(); 
}

这就是我试图切断结束的地方

double howmuch;
for(int i = 0; i < x.size(); i++)
{
     list.equals(x.get(i));
     howmuch = Double.parseDouble(list.substring(5, list.length()));
}
// x is the list

我得到nullpointerexception。想知道如何解决这个问题,因为我对编程很陌生。

我导入的文档包含#和字母的组合,例如,101s 583.58

3 个答案:

答案 0 :(得分:0)

如果您在上面的代码中遇到NullPointerException,则listx为空。检查您设置其值的位置,或在问题中包含该部分代码。

答案 1 :(得分:0)

要为list分配值,您使用的是list = x.get(i);而不是list.equals(x.get(i));

更新

  • equals()不分配值,只检查两个对象是否相等。

  • x.get(i)返回的值将是BankAccount,因此您无法将其分配给列表(这是一个字符串)

  • 您必须使用toString()将BankAccount转换为String,或者在将其分配给列表之前通过调用其中一个BankAccount方法来获取其中的String,其工作原理取决于BankAccount类提供的方法。

答案 2 :(得分:0)

关于你的代码:你可能在最后一段代码粘贴之前的某个地方有某种类似于String line = null;的声明,你会在NullPointerException行得到一个list.equals(x.get(i));。这是因为您的list对象未初始化。但是你不需要这样做。见下文。

为了做你想做的事,你应该使用以下代码:

BankAccounts的类定义:

class BankAccounts {
   public String account; 
   public Double value;

   public BankAccounts(String account, Double value)
   {
      this.account = account;
      this.value = value;
   }
}

并像这样重写你的代码:

List<BankAccounts> x = new ArrayList<BankAccounts>();
try {
    Scanner reader;
    reader = new Scanner( new File("F:\\myCreditUnion.txt") );

    while ( reader.hasNext() )
    {
        String inputLine = reader.nextLine();
        first = inputLine.substring(0, 3);
        second = Double.parseDouble(inputLine.substring(5, inputLine.length()));
        x.add(new BankAccounts(first, second));
    }

    reader.close(); 
}

在我看来,您的输入文件包含ABC 10.324形式的行。您正在将此正确解析为BankAccounts个对象(每个对象包含一个代表帐户名的String和一个代表该数量的Double当您从文件中读取它们时。所以没有必要再次重新解析。

迭代和查看金额的代码如下;

// x is the list    
double howmuch = 0;
for(int i = 0; i < x.size(); i++)
{
    BankAccounts accounts = x.get(i);
    howmuch = accounts.amount; // there is no need to cast since unboxing will occur here.
    // here howmuch will contain the amount for each account
}