条件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);
}
}
}
我可以检索列但无法处理^^
个案例
答案 0 :(得分:1)
String.split()不适合您的条件。放弃它。
从字符串中的位置开始搜索下一个分隔符并不难。反复这样做(使用String.indexOf(delimiter,start))来查找每个字段并加载你自己的列表(我会使用ArrayList,如果我必须有一个数组,最后转换为数组)。
确保你的开始和结束位置正确有一点困难,但这是编程的一部分。它将允许您检测^^个案,并根据您的喜好输入空或空字符串。对不起,蛮力比处理不能处理你案件的事情更容易做到。
答案 1 :(得分:0)
在99%的情况下,不需要为使用CSV文件这样的通用任务滚动自己的东西。大多数基本问题,如空值或包含内部分隔符的值,都是由大多数库开箱即用的。您可以从SuperCSV和Apache Commons CSV开始。我在我的项目中使用过SuperCSV,它表现良好且也很容易学习。
当您读取CSV行(因此库API处理所有解析麻烦)时,您可以获得第3列的值,使用String.split()解析它并将其放入Set集合以确保元素是唯一的。 / p>