0

嗨,我遇到了一个困扰我的错误!

我想要做的是拆分一个使用“;”的文本文件

然后将其存储为 ArrayList,但此错误不断弹出!

package au.edu.canberra.g30813706;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Environment;
import android.widget.EditText;


public class FileReader extends Activity{{

    ArrayList<String> sInfo = new ArrayList<String>();

    String txtName = "AccomodationTxt.txt";
    File root = Environment.getExternalStorageDirectory();
    File path = new File(root, "CanberraTourism/" + txtName);

    try {

        BufferedReader br = new BufferedReader (
                            new InputStreamReader(
                            new FileInputStream(path)));
        String line;
        String[] saLineElements;
        while ((line = br.readLine()) != null)
        {
            //The information is split into segments and stored into the array
            saLineElements = line.split(";");
            sInfo.add(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3], saLineElements[4]);

        }
         br.close();


    } 
    catch (FileNotFoundException e) {

        System.err.println("FileNotFoundException: " + e.getMessage());
    }}

}

错误:

The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (String, String, String, String, String)
4

5 回答 5

1

您不能使用该add方法添加多个元素。您将需要使用addAll. 像这样的东西:

List<String> list = new ArrayList<String>();
list.addAll(Arrays.asList(saLineElements[0], saLineElements[1]));

使用addAll您可以将任何字符串集合添加到列表中。

于 2013-05-02T11:28:30.523 回答
1

代替:

sInfo.add(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3], saLineElements[4]);

和:

for (int i = 0; i < saLineElements.length; i++) 
  sInfo.add(saLineElements[i]);
于 2013-05-02T11:30:08.753 回答
0

您的代码中有两个问题,首先是您尝试错误地使用 arraylist add 方法。其次是您试图以非常原始的方式存储信息。在面向对象的编程中,正确的方法是用对象来表示数据。正如文件名所暗示的那样,您可能正在尝试将由分号分隔的住宿相关数据存储在文件中。更好地创建一个类(例如“Accommodation”)来表示具有属性的住宿数据,就像您在文件中用分号分隔的一样。然后创建一个住宿对象的 Arraylist,例如: ArrayList accomList = new ArrayList

然后使用相同的文件读取和分割每一行的逻辑,在数组列表中创建和添加住宿对象,如:accomList.add(new Accommodation(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3] , saLineElements[4]))

确保在您的住宿类中添加适当的构造函数。

如果您遵循 OOPS 概念,您的代码应该看起来更好并且运行良好。

希望能帮助到你!

于 2013-05-02T12:51:07.983 回答
0
ArrayList<String> sInfo = new ArrayList<String>();

您不能使用add(int, String)添加多个String。您不能这样做sInfo.add(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3], saLineElements[4]);

使用addAll()代替,

sInfo.addAll(Arrays.asList(saLineElements[0], saLineElements[1], 
                      saLineElements[2], saLineElements[3], saLineElements[4]));
于 2013-05-02T11:28:47.083 回答
0

您已经声明了字符串类型的arraylist

   ArrayList<String> sInfo = new ArrayList<String>();

没有为 arraylist 定义的方法,例如

    sInfo.add(String, String, String, String, String);   

请检查以下文档

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

您可以按照 Boris Pavlović 的建议使用 for 循环

于 2013-05-02T11:30:25.950 回答