在Java向量中插入null

时间:2012-06-02 05:48:03

标签: java vector insert null

我正在尝试使用tokenizer将.txt文件的内容插入到向量中;但是一个特定的文件没有被插入。后来我需要将向量的内容传递给jtable。问题是.txt的第一行有空值所以它没有插入它跳过第一行并继续前进..是有一种方法可以在向量中存储null并将其替换为“”?

private void loadSecondPreview() {
  String aLine;
  recordData = new Vector();
  columnNames = new Vector();

  try {
    FileInputStream fin = new FileInputStream(dataFile);
    BufferedReader br = new BufferedReader(new InputStreamReader(fin));
    // extract column names
    if (delimiter == ",") {
      StringTokenizer st1 =
        new StringTokenizer(br.readLine(), ",");
      while (st1.hasMoreTokens()) {
        columnNames.addElement(st1.nextToken());
    }
    // extract data
    while ((aLine = br.readLine()) != null) {
      StringTokenizer st2 =
        new StringTokenizer(aLine, ",");
      while (st2.hasMoreTokens()) {
        recordData.addElement(st2.nextToken());
      }
    }
  } else if (delimiter == "\t") {
    StringTokenizer st1 =
      new StringTokenizer(br.readLine(), "\t");
    while (st1.hasMoreTokens()) {
      if (st1.equals(null)) {
        columnNames.addElement(" ");
      } else {
        columnNames.addElement(st1.nextToken());
      }
    }
    // extract data
    while ((aLine = br.readLine()) != null) {
      StringTokenizer st2 =
        new StringTokenizer(aLine, "\t");
      while (st2.hasMoreTokens()) {
        if (st2.equals(null)) {
          recordData.addElement(" ");
        } else {
          recordData.addElement(st2.nextToken());
        }
      }
    }
  }
  br.close();

  System.out.println("Column vector size:" + columnNames.size());
  System.out.println("Record vector size:" + recordData.size());

  for (int x = 0; x < columnNames.size(); x++) {
    System.out.println("Column vector:" + x + " " + columnNames.elementAt(x));
  }

  for (int x = 0; x < recordData.size(); x++) {
    System.out.println("Record vector:" + x + " " + recordData.elementAt(x));
  }

O / P: **列矢量大小:0 记录矢量大小:5 记录向量:0 8 记录向量:1 8.100 记录向量:2 8.200 记录向量:3 9 记录载体:4 9.8

测试文件记录:第一行有两个空值列

8 8.100     8.200 9 9.8

4 个答案:

答案 0 :(得分:2)

试试这个

BufferedReader in = new BufferedReader(new FileReader(loc + fname));
    ArrayList<String []> input = new ArrayList<String []>();
    String [] temp;
    String line;
    String stemp = null, sprev;
    ArrayList<String> comp = new ArrayList<String>();
    while((line = in.readLine())!= null)
    {
        StringTokenizer st = new StringTokenizer(line, ",", true);
        temp = new String [15];
        int i = 0;
        while(st.hasMoreTokens())
        {
            sprev = stemp;
            stemp = st.nextToken(); 
            if((stemp.equals(sprev)) && stemp.equals(","))                
            {
                //it is a null field
                temp[i++] = null;                    
            }
            else if(!(stemp.equals(",")))
            {
                temp[i++] = stemp;
            }
        }
        input.add(temp);

为我工作

答案 1 :(得分:1)

类似的东西:

add(value == null ? "" : value)

答案 2 :(得分:0)

为什么要使用Vector?考虑列表,因为它将维护订单。 有多种方法可以替换空字符串来代替null。如果您要在代码中的某个位置添加对象,而不是 Tom 提到的对象。如果有多个地方,甚至比扩展Vector和覆盖添加或方便的方法将最小化检查在一个地方

答案 3 :(得分:0)

代码中的以下行

if (st1.equals(null)) {

没有任何意义。您正在测试您的tokenizer是否存在,而不是它是否会返回下一个令牌。

使用此模式:

String nextToken = tokenizer.nextToken()
if (nextToken != null) {
    ....
}

DO 使用变量。因为if (tokenizer.nextToken() == null) { vec.add(tokenizer.nextToken()); }将使用 TWO 令牌。一个用于测试,一个用于添加,使整个测试毫无意义和破坏。

它不会因为它更短而更快。初学者错误,尝试通过减少写入来优化代码。