0

我在将数组值传递给构造函数时遇到了一些问题。我有一个file.txt包含一些值的行,例如:

彼得|柏林|德国|0930295235|富。

我想出了如何将线条转换为数组。但我不知道如何将数组中的值传递给构造函数,以将数组转换为具有数组属性的对象。

这是主要课程:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;


public class FileReader {

    public static void main(String[] args) {
        try {
            // Open the file that is the first 
            // command line parameter
            FileInputStream fstream = new FileInputStream("file.txt");
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            // Read the file line by line
            while ((strLine = br.readLine()) != null) {
                // Print the content on the console
                String s[] = strLine.split("\\|");
                // System.out.println(java.util.Arrays.toString(s));
                // System.out.println (strLine);
                for (String element : s) {
                    System.out.println(element);
                    // HERE I NEED TO PASS THE ARRAY VALUES FOR EACH LINE TO TRANSFORM THE ARRAYS TO OBJECTS
                    Item item = new Item(element,element,element,element,element);
                    System.out.println("*************************************");
                }
                // Close the input stream
                in.close();
            } catch (Exception e) { //Catch exception if any
                System.err.println("Error: " + e.getMessage());
        }
    }
}

这是类项目:

public class Item {

    private String name;
    private String city;
    private String state;
    private String number;
    private String foo;

    public Object(String name, String city, String state, String number,String foo){
        this.name = name;
        this.city = city;
        this.state = state;
        this.number = number;
        this.foo = foo; 
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getFoo() {
        return foo;
    }
    public void setFoo(String foo) {
        this.foo = foo;
    }
}

我需要对象来更多地处理数据。我很感激任何帮助。

4

6 回答 6

2

我认为您想要做的事情类似于以下内容,尽管尚不完全清楚。

String s[] = strLine.split("\\|");
Item item = new Item(s[0], s[1], s[2], s[3], s[4]);

另请注意,在您创建新对象后,它几乎会立即超出范围,因此您需要将其存储在循环Item之外声明的某种容器中:while

List<Item> items = new ArrayList<Item>();
String line;

while((line = br.readLine()) != null) {
    String[] words = line.split("\\|");
    Item item = new Item(words[0], words[1], words[2], words[3], words[4]);
    items.add(item);
}
于 2012-11-23T11:55:11.147 回答
1

我不认为你需要这个for循环。

for(String element : s)
{
}

如果您想String从数组中提取特定的 s,您应该使用类似的东西,

String name = s[0];

但请注意不要选择数组范围之外的项目。

于 2012-11-23T11:54:28.687 回答
1
String s[] = strLine.split("\\|");
Object item = new Object(s[0],s[1],s[2],s[3],s[4]);
于 2012-11-23T11:56:55.010 回答
1

你不应该在那里有一个 for 循环,只需将每个数组值传递给Objects 构造函数,首先检查你是否有正确数量的值。newObject已经在 J​​ava 中使用,所以调用你的类(记住对象和类之间的区别)MyObj,.

MyObj myObj = null; // De
String s[] = strLine.split("\\|");
if (s.length==5){
  myObj = new MyObj(s[0],s[1],s[2],s[3],s[4]);
} else {
  System.err.println("Wrong number of arguments on the line"+strLine);
}

显然使用不带参数的构造函数,然后将每个字段设置为

myObj = new MyObj();
myObj.setName( s[0]); //etc

关于哪些数据进入哪个字段,哪个更具可读性

于 2012-11-23T11:58:51.197 回答
0

如何将 for 循环更改为:

for(int i=0;i<s.size();i+=5) {
      System.out.println(s[i]);
      Object item = new Object(s[i],s[i+1],s[i+2],s[i+3],s[i+4]);
 }

但这假设“s”的大小为 5n;n 是 1,2,3...

于 2012-11-23T11:54:34.087 回答
0

由于您知道 的结构以及的长度file.txt因此String[] s您可以调用您拥有的数组的每个元素:

for (String element : s) {
    System.out.println(element);
    Item item = new Item(s[0], s[1], s[2], s[3], s[4]);
}

为了保存Item items 并且不使用循环中的下一个元素覆盖它们,您可以将其与您的项目一起保存到数组中(从声明数组开始):

public static void main(String[] args) {
    try {
        ArrayList<Item> items = new ArrayList<Item>();
        ...

进而

for (String element : s) {
    System.out.println(element);
    Item item = new Item(s[0], s[1], s[2], s[3], s[4]);
    items.add(item);
}
于 2012-11-23T12:02:14.360 回答