0

条件1:csv文件就像

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

在某些行中,令牌就像^^ (它不是空的,并且中间没有空格)我必须将第三列检索到字符串数组中,但我无法理解如何处理^^案例。

条件 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);
    }
  }
}

我能够检索列但无法处理^^案例

4

2 回答 2

1

String.split() 不适合您的条件。扔掉它。

从字符串中的某个位置开始搜索下一次出现的分隔符并不难。重复执行此操作(使用 String.indexOf(delimiter, start))以查找每个字段并加载您自己的列表(我将使用 ArrayList,如果我必须有一个数组,则在最后转换为数组)。

确保你有正确的开始和结束位置有点麻烦,但这是编程的一部分。它将允许您检测 ^^ 情况并根据您的喜好输入空字符串或空字符串。抱歉,蛮力将比手动处理无法处理您的案件的事情更容易做到。

于 2013-07-09T17:51:41.200 回答
0

在 99% 的情况下,不需要为使用 CSV 文件这样的通用任务滚动你自己的东西。大多数基本问题(例如空值或包含分隔符的值)都由大多数库开箱即用地处理。您可以从SuperCSVApache Commons CSV开始。我在我的项目中使用了 SuperCSV,它性能很好,也很容易学习。

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

于 2013-07-09T18:37:13.563 回答