要从CSV文件中检索数据,请将其拆分并将一列的数据存储在字符串数组中,而不重复

时间:2013-07-09 17:32:16

标签: java csv

条件1:csv文件类似于

abi^siri^ram^ravi
abc^^cde^ram,siri^ravi

在某些行中,令牌类似于^^(它不为空,并且中间没有空格) 我必须将第3个coloumn检索到字符串数组中,但我无法理解如何处理^^个案例。

条件2:如第2行所示,一个元组,即(ram,siri)它应该再次被分割,并且应该存储在同一个数组中。

条件3:字符串数组不应包含重复项。

我的节目:

import java.io.*;
import java.util.*;

class Parser{
public static void main(String[] args) throws IOException
{
    FileInputStream fs = new FileInputStream("D:\\myfile.csv");
    DataInputStream in = new DataInputStream(fs);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String line = null;

    while((line=br.readLine())!=null)
    {
        String[] values = line.split("\\^");
        String reqcol = values[values.length - 1];
        System.out.println(reqcol);
    }
  }
}

我可以检索列但无法处理^^个案例

2 个答案:

答案 0 :(得分:1)

String.split()不适合您的条件。放弃它。

从字符串中的位置开始搜索下一个分隔符并不难。反复这样做(使用String.indexOf(delimiter,start))来查找每个字段并加载你自己的列表(我会使用ArrayList,如果我必须有一个数组,最后转换为数组)。

确保你的开始和结束位置正确有一点困难,但这是编程的一部分。它将允许您检测^^个案,并根据您的喜好输入空或空字符串。对不起,蛮力比处理不能处理你案件的事情更容易做到。

答案 1 :(得分:0)

在99%的情况下,不需要为使用CSV文件这样的通用任务滚动自己的东西。大多数基本问题,如空值或包含内部分隔符的值,都是由大多数库开箱即用的。您可以从SuperCSVApache Commons CSV开始。我在我的项目中使用过SuperCSV,它表现良好且也很容易学习。

当您读取CSV行(因此库API处理所有解析麻烦)时,您可以获得第3列的值,使用String.split()解析它并将其放入Set集合以确保元素是唯一的。 / p>

相关问题