如何逐个字符地拆分异常(Java)

时间:2015-04-23 08:31:36

标签: java arrays string csv split

我想处理CSV文件。 但处理它有一些问题:

我需要分开线条; 通常我会使用.split方法btu,在这种情况下有例外:

一行可以有空的"单元格"所以看起来像x;y;z;;a;;;b 我仍然需要在数组中获取空​​的。 例如

array[0] = "x";
array[1] = "y";
array[2] = "z";
array[3] = "";

等等。 另一个例外是: 有一个单元格包含html代码(其中包含&#34 ;;")。 因此,如果;字符串不应该被拆分;介于""之间。 有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用api OpenCSV。这是做同样的小例子,

public class OpenCSVExample {

public static void main(String[] args)
{
    CSVReader reader = null;
    try
    {
        //Get the CSVReader instance with specifying the delimiter to be used
        reader = new CSVReader(new FileReader("SampleCSVFile.csv"),';');
        String [] nextLine;
        //Read one line at a time
        while ((nextLine = reader.readNext()) != null)
        {
            for(String token : nextLine)
            {
                //Print all tokens
                System.out.println(token);
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}

以上示例摘自此参考ParseCSVFiles,请查看详细信息。

答案 1 :(得分:0)

解析此表单的数据是一个常见问题,已由CSV解析器解决。您可以使用Apache Commons CSV并将分隔符更改为numberA + (uint16_t)1,而不是默认;

答案 2 :(得分:0)

你可以通过reg exp获得。

<column name="Name" />

SampleCsv.csv

  

X; Y; ​​Z ;;一个;;;&#34 ;;&#34 ;; B'/ P>      

1; 2; 3; 4 ;;;&#34 ;;&#34 ;; 5

O / P

public void regExpSeparateWithSemicolon() {
    Scanner scanner = null;
    String[] result = null;
    String testString = null;
    String regularExpression = "(?!=\",\");";
    int counter = 0;
    try {
        scanner = new Scanner(
                new File("/home/domain/immo/Documents/SampleCsv.csv"));//Path to csv file
        while(scanner.hasNext()) {
            //String testString = "x;y;z;;a;\";\";b";
            testString = scanner.next();
            testString = testString.replaceAll("\";\"","\",\"");                                
            result = testString.split(regularExpression);
            for(int index = 0; index < result.length; index++) {
                System.out.println("result["+counter+++"] = "+
                        result[index].replace(",", ";"));
            }                   
        }
    } catch (FileNotFoundException fnf) {
        System.out.println("Exception occured :"+fnf);
    } catch (Exception e) {
        System.out.println("Exception occured :"+e);
    } finally {
        if(null != scanner) {
            scanner.close();    
        }               
    }
}
  

我无法弄清楚如何在没有replaceAll的情况下使其工作。

我希望有人能找到它。