Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从.csv文件格式中读取两个连续逗号作为java中的唯一值_Java_Csv_Stringtokenizer_Opencsv - Fatal编程技术网

如何从.csv文件格式中读取两个连续逗号作为java中的唯一值

如何从.csv文件格式中读取两个连续逗号作为java中的唯一值,java,csv,stringtokenizer,opencsv,Java,Csv,Stringtokenizer,Opencsv,假设csv文件包含 1,112,,ASIF 下面的代码消除了两个连续逗号之间的空值。 提供的代码超出了要求 String p1=null, p2=null; while ((lineData = Buffreadr.readLine()) != null) { row = new Vector(); int i=0; StringTokenizer st = new StringTokenizer(lineData,

假设csv文件包含

1,112,,ASIF
下面的代码消除了两个连续逗号之间的空值。 提供的代码超出了要求

   String p1=null, p2=null;       
    while ((lineData = Buffreadr.readLine()) != null)
        {
        row = new Vector(); int i=0;
        StringTokenizer st = new StringTokenizer(lineData, ",");

               while(st.hasMoreTokens())
               {
                row.addElement(st.nextElement());
                    if (row.get(i).toString().startsWith("\"")==true)
                    {
                        while(row.get(i).toString().endsWith("\"")==false)
                        {
                        p1= row.get(i).toString();
                        p2= st.nextElement().toString();                            
                        row.set(i,p1+", "+p2);
                        }                           
                        String CellValue= row.get(i).toString();
                        CellValue= CellValue.substring(1, CellValue.length() - 1);
                        row.set(i,CellValue);
                        //System.out.println(" Final Cell Value : "+row.get(i).toString());
                    }                       

                                            eror=row.get(i).toString();                     
                        try
                            {
                        eror=eror.replace('\'',' ');
                        eror=eror.replace('['  , ' ');
                        eror=eror.replace(']'  , ' ');
                        //System.out.println("Error "+ eror);
                        row.remove(i);
                        row.insertElementAt(eror, i);
                            } 
                        catch (Exception e) 
                            {
                            System.out.println("Error exception "+ eror); 
                            }
                        //}
                i++;
               }

如何从.csv文件格式中读取两个连续逗号作为java中的唯一值

只需将整行读入字符串,然后执行
string.split(“,”)

生成的数组应该正好包含您要查找的内容

如果需要检查“转义”逗号,那么查询将需要一些正则表达式,而不是简单的“,”


StringTokenizer
skpis是空令牌。这是他们的行为。来自JLS

StringTokenizer
是一个遗留类,出于兼容性原因保留它,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改用String的split方法或java.util.regex包


只需使用
String.split(“,”)
就完成了。

下面是一个通过拆分到字符串数组来完成此操作的示例。更改的行标记为注释

// Start of your code.
            row = new Vector(); int i=0;
        String[] st = lineData.split(","); // Changed
        for (String s : st) { // Changed
            row.addElement(s); // Changed
            if (row.get(i).toString().startsWith("\"") == true) {
                while (row.get(i).toString().endsWith("\"") == false) {
                    p1 = row.get(i).toString();
                    p2 = s.toString(); // Changed
                    row.set(i, p1 + ", " + p2);
                }
                ...// Rest of Code here
        }

在java中读取为唯一值是什么意思?唯一是指在java中打开csv文件时作为空单元格值可见的单独或现有值excel@Anugoonj:非常感谢,您提供的信息毫无疑问是有用的。但我已经在遗留软件上做了一些改变……这似乎是另一种方式。有没有可能使用这个代码?可能吧。我不打算用10行代码来做2可以做的事情,在10年的Java编程中,我从来都不需要StringTokenizer,所以我真的不能帮你:)@RajuS,StringTokenizer默认情况下忽略空值,你必须使用split。@vzamanillo:你能用任何例子来解释string.split(“,”)吗??
// Start of your code.
            row = new Vector(); int i=0;
        String[] st = lineData.split(","); // Changed
        for (String s : st) { // Changed
            row.addElement(s); // Changed
            if (row.get(i).toString().startsWith("\"") == true) {
                while (row.get(i).toString().endsWith("\"") == false) {
                    p1 = row.get(i).toString();
                    p2 = s.toString(); // Changed
                    row.set(i, p1 + ", " + p2);
                }
                ...// Rest of Code here
        }